관리 메뉴

KorSA

JAVA 쓰레드 본문

Knowledge Wiki/Java

JAVA 쓰레드

Praiv. 2021. 12. 1. 18:01
320x100

1. 쓰레드의 구현과 실행
    1) Thread 클래스를 상속
    2) Runnable 인터페이스를 구현

2. JAVA는 쓰레드의 우선순위를 1~10으로 구분한다
    JVM에서 정한 게 1~10
    실제 OS인 Windows는 32 단계
    JVM에서 정한 우선 순위는 희망 사항이어서 반드시 이 순위가 지켜지진 않음.
    JVM이 OS는 아니기 때문에.

3. 데몬 쓰레드(daemon thread)
    일반 쓰레드의 작업을 돕는 보조적인 역할을 수행
    일반 쓰레드가 모두 종료되면 자동적으로 종료된다.
    반대로 말하면 일반 쓰레드는 자동적으로 종료되지 않음.
    ex) 가비지 컬렉터(GC), 자동저장, 화면 자동갱신 등

4. 데몬 쓰레드는 보통 무한루프로 구현
    프로그램이 언제 종료될지 모르니까.

5. 쓰레드 sleep()
    예외 처리를 해야 한다. (InterruptedException이 발생하면 깨어남)
    보통 함수로 try-catch를 한 번 wrapping해서 사용

void delay(long millis){
  try{
	  Thread.sleep(millis);
  } catch(InerruptedException e){ }
}


    특정 쓰레드를 지정해서 멈추게 하는 것은 불가능하다

th1.sleep(2000); // th1을 sleep() 시키는 게 아니다. 이렇게 쓰지마라. 실제론 내가 sleep 한다. 이렇게 하면 오해의 소지가 다분하다.

Thread.sleep(2000); // 내가 sleep 한다.


6. 쓰레드 interrupt()

void interrupt(); // 쓰레드의 interrupted 상태를 false에서 true로 변경
boolean isInterrupted(); // 쓰레드의 interrupted 상태를 반환
static boolean interrupted(); // 현재 쓰레드의 interrupted 상태를 알려주고 , false로 초기화


    파일 다운로드 중 취소하고 싶을 때 등에 사용

7. 쓰레드 suspend(), resume(), stop()

void suspend(); // 쓰레드를 일시정지 시킨다.
void resume(); // suspend()에 의해 일시정지된 쓰레드를 실행대기상태로 만든다.
void stop(); // 쓰레드를 즉시 종료시킨다.


    얘네들은 사용을 권장하지 않는다. dead-lock의 여지가 있기 때문에 deprecated 됨.


8. volatile 키워드
    자주 바뀌는 변수임을 나타내는 키워드
    CPU가 cache할 때 복사본으로 cache하지 말고 직접 원본에 접근해서 사용하라는 의미

9. 쓰레드 yield()
    남은 시간을 다음 쓰레드에게 양보하고, 자신(현재 쓰레드)은 실행 대기한다.

10. 쓰레드에서 yield()와 interrupt()를 적절히 사용하면 응답성과 효율을 높일 수 있다.

728x90
728x90

'Knowledge Wiki > Java' 카테고리의 다른 글

JAVA 람다식  (0) 2021.12.01
JAVA 쓰레드 동기화  (0) 2021.12.01
JAVA Runtime 에러를 줄이기 위한 노력  (0) 2021.12.01
JAVA 제네릭  (0) 2021.12.01
JAVA 해싱(Hashing)  (0) 2021.12.01
Comments