Day 61

ChangWoo·2023년 6월 5일
0

자바의 정석

목록 보기
58/71
post-thumbnail

ch 13-7~13 싱글 쓰레드와 멀티 쓰레드, 쓰레드의 I/O 블락킹

main 쓰레드

  • main메서드의 코드를 수행하는 쓰레드
public class Hello {
	public static void main(String[] args) {
    	System.out.println("Hello,world.");
    }
}

  • 쓰레드는 '사용자 쓰레드'와 '데몬 쓰레드' 두 종류가 있다.
  • 실행 중인 사용자 쓰레드가 하나도 없을 때 프로그램은 종료된다.
  • 지금까지는 main쓰레드 하나만 실행했기 때문에 main쓰레드가 없으면 종료되었지만, 멀티 쓰레드를 통해 run쓰레도가 하나 추가되었으므로 main쓰레드가 없어도 종료되지 않는다.

싱글쓰레드와 멀티 쓰레드

  • 싱글쓰레드
  • "-"와 "|"을 출력하는 두개의 작업을 한다.
  • 멀티쓰레드

  • A에서 B로 넘어가는 과정을 context switching이라 한다.

쓰레드의 I/O블락킹(blocking)

  • 입출력시 막힘(블락킹)현상이 일어나는 것
  • 싱글 쓰레드로 실행하게 되면, A작업이 중지되면 B작업을 진행할 수 없다.

  • 멀티 쓰레드로 실행하게 되면, A작업이 중지되더라도 B작업을 진행할 수 있다.

ch 13-14~17 쓰레드의 우선순위, 쓰레드 그룹

쓰레드의 우선순위(priority of thread)

  • 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 하여 특정 쓰레드가 더 많은 작업시간을 갖게 할 수 있다.
void setPriority(int newPriority) 쓰레드의 우선순위를 지정한 값으로 변경한다.
int getPriority()				  쓰레드의 우선순위를 반환한다.
public static final int MAX_PRIORITY = 10   // 최대우선순위
public static final int MIN_PRIORITY = 1   // 최소우선순위
public static final int NORM_PRIORITY = 5   // 보통우선순위
  • 쓰레드의 우선순위 = 1~10
  • 쓰레드의 우선순위이를 지정하지 않으면 보통우선순위 5가 지정된다.
  • 우선순위가 같으면 같은 시간을 할당 받는다.
  • 우선순위가 높은 경우가 더 많은 시간을 할당 받는다.

쓰레드 그룹

  • 서로 관련된 쓰레드를 그룹으로 묵어서 다루기 위한 것
  • 모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함되어 있어야 한다.
  • 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 'main'쓰레드 '그룹'에 속한다.
  • 자신을 생성한 쓰레드(부모 쓰레드)의 그룹과 우선순위를 상속받는다.
Thread(ThreadGroup group, String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
ThreaadGroup getThreadGruou() 쓰레드 자신이 속한 쓰레드 그룹을 반환한다.
void uncaughtExeption(Thread t, Throwable e) 처리되지 않은 예외에 의해 쓰레드 그룹의 쓰레드가 실행이 종료되었을 때, JVM에 의해 이 메서드가 자종적으로 호출된다.

쓰레드 그룹의 메서드

  • 활성상태 = 작업을 다 마치지 않은 상태
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글