본문 바로가기
JAVA

Thread

by Minius 2018. 3. 8.
반응형

Thread


start();

 - runnable (실행 대기 상태)

 - 스케줄러에 의해서 실행 되면  running 상태

 - cpu가 할당받으면 그 스레드를 실행

 - runnable과 running 상태를 번갈아 감.


끝나는 시점 

run메소드가 끝나는 시점

stop flag를 통해서 끝내는 방법

stop 메소드를 쓰면 안됨.


block 상태로 변하는 block event

sleep

join

yield 동일 레벨, 자기 이상 우선순위를 가진 thread한테 양보. 본인은 blocking 됨. (본인이 아무 의미 없는 행위를 반복할 때)

blocked -> unblocked


thread n개 가 한가지에 동시에 작업 할 때 synchronized를 붙이면 동기화 되어 하나씩만 작업한다.

특정 구간에만 sync 해 줄 수 있음.

한 thread가 작업중일 때 다른 thread가 변경하지 못하도록 하는 것.


class SharedObject{


private int data;


synchronized get() {


}


synchronized set() {


}


get2() {

synchronized{} //메서드 내에 sync를 할 수 있다. 


}

}


thread A, thread B가 있을 때, A가 get()을 실행할 때, B는 set()도 실행 못한다.

동기화 된 클래스에 object.lock이 있으면 아무도 사용하지 않고 있는 것. 그래서 어느 thread든 작업할 수 있다.

thread A가 get()을 끝내면 lock을 반환. 그 뒤 B가 set()을 실행.


특정 조건을 만족시키지 못한다면 계속 실행시키는게 아니라  waitpool에 대기시킴.

깨어나는 시점은 notify, notifyall,interrupt 을 실행시켜 깨워줌.

bakery라면 빵이 계속 있는지 체크할 것, 하지만 waitpool에 있으면 가만히 대기.

stack에 빵이 쌓이는 순간 notify, notifyall로 알려 깨워줌. (waitpool에 있는 thread만)

waitpool로 빼주지 않으면 sync된 메서드를 다른 thread도 실행 못함.

빠져주면 다른 메서드가 그 이후를 실행 할 수 있음.

notify : 특정 thread 깨우기

notifyall : 모든 thread 깨우기


thread 다이어그램에 대한 이미지 검색결과






멀티 프로세스, 멀티 스레드


한 프로그램에서 프로세스 여러개가 만들어짐.

멀티테스킹. 

한 프로세스에서 여러개의 thread를 만드는 것도

멀티테스킹.



메인 스레드


main() 시작 첫 코드부터 순차적으로 실행


실행 종료 조건 

1) 마지막 코드 실행

2) return 문 만나면.


싱글 스레드: 메인 스레드가 종료하면 프로세스도 종료

멀티 스레드: 실행 중인 스레드가 하나라도 있으면 프로세스 미종료


작업 스레드 이름 (자동설정)

작업 스레드 이름 변경

현재 스레드의 객체 참조 얻기

Thread thread = Thread.currentThread();


자바의 스레드 스케줄링

우선순위방식 : 1~10, 기본값은 5

순환할당방식 : 시간 할당량을 정해서 하나의 스레드를 정해진 시간만큼 실행


stop();을 사용하면 즉시 종료되는 편리함이 있지만 

deprecated - 사용중이던 자원들이 불안정한 상태로 종료됨.


따라서 stop flag를 사용

stop이 true가 되면 run이 종료된다.

thread가 사용한 자원 정리


interrupt()를 이용하는 방법

스레드가 정지상태일 경우 InterruptException 발생 시킴.

대기조건이 있을 때 적용됨.

Thread.sleep();

대기상태를 받아도 interrupt가 없으면 계속 실행




데몬 스레드(daemon)


워드프로세서의 자동저장, 미디어 플레이어의 동영상 및 음악 재생, GC 


스레드를 데몬 스레드로 만들기

주 스레드가 데몬이 될 스레드의 setDaemon()








스레드 그룹


system 그룹 : JVM 운영에 필요한 스레드를 포함

system/main 그룹 : 메인 스레드 포함



스레드 그룹 생성


스레드 그룹의 일괄 interrupt()

 - 


Thread(ThreadGroup group, Runnable target, String name)

Allocates a new Thread object so that it has target as its run object, has the specified name as its name, and belongs to the thread group referred to by group.
- 그룹지정


스레드 풀













'JAVA' 카테고리의 다른 글

Static 예제  (0) 2018.03.14
Static  (0) 2018.03.14
객체지향 프로그래밍  (0) 2018.03.05
Sort  (0) 2018.02.20
이름 나이 오름차순 내림차순  (0) 2018.02.20

댓글