Thread-하나의 프로세스 내의 작업의 단위
Thread 만들기 위해서 extends Thread 해야 하는데 다른 객체를 상속받고 있다면
implements Runnable 해서 인터페이스 구현
Thread 는 run이라는 함수를 구현해야함. 그 안에 하고자 하는 작업을 지시
Thread실행 방법은 thread 객체 만들고
그 객체를 start()함수로 실행시킴
메인 함수에 두 개의 thread를 만들었다면 총 thread는 메인포함 3개
따라서 메인은 두개의 thread를 띄우고 종료된 후에 각 thread는 run에 접근하여 실행함
두 개의 thread는 순서가 지정되지 않았으므로 임계영역에 대해 마구잡이 접근임.
class mythread extends Thread{
public void run()
{ }
}
//메인에서
mythread t1 = new mythread();
mythread t2 = new mythread();
t1.start();
t2.start();
thread start()시, runnable상태로 빠지고 이때 스케줄러에 의해서 cpu점유함
Sleep(1000) 1초 sleep
Not runnable 상태로 감
wait()시 not runnable
notify() 호출시에 runnable
join()
한 스레드가 다른 스레드에 조인을 걸면 다른 스레드가 끝날 때 까지 조인을 건 스레드는 not runnable상태로 빠짐
->Main에서 각 스레드에 join을 걸면 각 스레드 작업이 끝난 후에 메인 작업이 실행되므로 스레드가 끝나기도 전에 변수에 값을 넣는 행위등은 일어나지 않음
Sleep시에 intterupt() 메소드가 호출되면 sleep하지 않고 예외로 빠짐
Thread 종료 하는 법은 Thread class에서 boolean flag 멤버변수를 하나 두고,
run메소드 안에 while문으로 하고자 하는 작업을 감싸는데
while조건을 flag가 true일 때 끝나도록 설정.
그리고 flag는 thread를 사용하는 쪽에서 유동적으로 조정하여 해당 thread를 멈추게 할 수 있다
'Java' 카테고리의 다른 글
Java Datastructure (0) | 2020.10.10 |
---|---|
Synchronized 키워드 (0) | 2019.11.08 |
데코레이터 패턴 (0) | 2019.11.08 |
RandomAcessFile (0) | 2019.11.08 |
직렬화 (0) | 2019.11.08 |