*Thread : 하나의 Program 안에서 처리죄는 작업(기능)단위
-process : 하나의 cpu가 처리하는 program 단위
시분할방식 (Time Scheduling) : CPU자신을 분할해서 각 프로세스를 처리, 빠르면 빠를수록 좋음. 우리는 동시에 음악도 듣고 카톡도하고 뭐도 하고 하는것 같지만 사실 분할된 cpu들이 계속 반복해서 돌아가는것.
1.생성
Tread : class임으로 생성해야함
Tread t = new Tread(); : tread 상속받는것 (Frame을 상속받은 경우엔 못함)
= new Tread(Runnable); : Runnable interface implements하는것
3.실행: run()
t1.run()
t2.run()
t3.run() (X)> 하면 동기임. t1끝나면 t2하고 t3함.
누가먼저 실행될지 모름. scheduler에 의해 실행됨
2.준비
따라서 준비단계를 거쳐야함
생성>준비>실행
준비 : t1.start();
내부적으로 scheduler가 scheduling할 수 있는 시간 벌어줌
t1.start()
t2.start()
t3.start() (0)> 하면 schduler가 뭐를 먼저 실행할지 정함.
4.대기
실행하다 잠시 멈출 수 있는데 이것이 대기
sleep(long millis )
long millis : 1/1000초
이 시간 지나면 자동적으로 실행으로 돌아옴. : time out
중지
: thread를 강제로 중지하는 것은 좋지 않음으로 쓸 일 없다.
종료
: run method가 끝나는 시점이 종료이다.
ThreadExt
package com.kitri.thread;
public class ThreadExt extends Thread{
String msg;
public ThreadExt(String msg) {
this.msg = msg;
}
@Override
public void run() {
for(int i=0;i<500;i++) {
System.out.println(msg);
}
}
}
ThreadTest
package com.kitri.thread;
public class ThreadTest {
public static void main(String[] args) {
Thread t1 = new ThreadExt("퐁");
Thread t2 = new ThreadExt("당");
Thread t3 = new ThreadExt("!!!");
//ThreadExt class가 Thread 상속받았으니 new ThreadExt로 해야함
// t1.run();
// t2.run();
// t3.run();
//이렇게 하면 t1 500번, t2 500번 t3 500번 실행. 일반 method 처럼됨
t1.start();
t2.start();
t3.start();
System.out.println("프로그램 종료!!!");
}
}
RunnableImpl
package com.kitri.thread;
public class RunnableImpl implements Runnable{
String msg;
public RunnableImpl(String msg) {
this.msg = msg;
}
@Override
public void run() {
for(int i=0;i<500;i++) {
System.out.println(msg);
}
}
}
RunnableTest
package com.kitri.thread;
public class RunnableTest {
public static void main(String[] args) {
Thread t1 = new Thread(new RunnableImpl("퐁"));
//RunnableImpl 은 Thread를 상속받은게 아니기 때문에 바로 new RunnableImpl을 하면 안되고 Tread를 먼저 생성하고 안에 생성해야함.
Thread t2 = new Thread(new RunnableImpl("당"));
Thread t3 = new Thread(new RunnableImpl("!!!"));
t1.start();
t2.start();
t3.start();
System.out.println("프로그램종료!!!!!!!!");
}
}
[출처] 빡쏘끼룩
'IT > JAVA' 카테고리의 다른 글
[프로그래머스] 정렬(Array)_1_K번째 수 (0) | 2020.12.16 |
---|---|
[Java] JDBC 연결 순서 완벽정리 (0) | 2020.12.15 |
[Java] I/O 3(입출력) (java.io) - NotePad 만들기 (0) | 2020.11.13 |
[Java] I/O 2(입출력) (java.io) - reader Class(reader, fileReader, bufferedReader) (0) | 2020.11.11 |
[Java] I/O (입출력) (java.io) - println, file (0) | 2020.10.24 |