본문 바로가기
programming/java

[java]thread

by 힐무새 2017. 6. 1.

Thread 생성과 실행

  • Thread 클래스로부터 직접 생성
    • Runnable 인터페이스를 implements한 클래스를 Thread 생성자의 매개값으로 전달한다
      class Task implements Runnable{}
      
      Thread t1= new Thread(new Task());
      
      t1.start();
  • Thread 하위 클래스로부터 생성
    • Thread 클래스를 상속해서 바로 run()을 구현해서 실행
      class Task2 extends Thread{}
      
      Task2 t1= new Task2();

비교

  • implements를 통한 Thread 생성은 다중상속이 가능하지만, extends를 활용한 Thread 생성은 다중상속이 불가능하기 때문에 Thread 상속을 활용한다면 추가적인 클래스 상속이 불가능하다. 따라서 추가적인 상속이 필요한 경우 Runnable 인터페이스를 구현하여 활용하는 것이 좋다.

Thread 우선순위

  • 멀티쓰레드는 동시성 또는 병렬성으로 실행한다
    • 동시성: 멀티 작업을 위해 cpu(하나의 코어)에 멀티 쓰레드가 번갈아가며 실행
    • 병렬성: 멀티 작업을 cpu(멀티 코어)에서 개별 쓰레드를 동시에 실행
  • 특정한 경우에 우선순위를 지정해서 처리해야 할 필요가 있는 경우
    • thread.setPriority(1~10)
      Thread.MAX_PRIORITY : 10
    • 우선 순위가 높은 Thread는 실행할 기회를 더 많이 가지게 한다

Thread의 상태(life cycle)

  • 객체 생성: NEW
    • 스레드 객체가 생성, start() 메서드가 호출X
      ex) Thread t1= new Thread();
  • 실행 대기 : RUNNABLE
    • 실행 상태로 언제든지 갈 수 있는 상태
      ex) t1.start();
    • 실행 대기 상태에 있는 스레드 중에 스레드 스케쥴링에 의해 선택된 스레드가 CPU 자원을 할당받고 run() 메서드를 실행한다.
    • 실행과 runnable한 내용이 반복적으로 처리된다.
  • 일시 정지
    • WAITING: 다른 스레드가 통지할 때 까지 기다리는 상태
    • TIMED_WAITING: 주어진 시간 동안 기다리는 상태
    • BLOCKED: 사용하고자 하는 객체의 락이 풀릴 때 까지 기다리는 상태
  • 종료: TERMINATED
    • 실행을 마친 상태

Thread 상태 제어


상태제어 메서드

  • interrupt(): 일시 정지 상태의 스레드에서 예외를 발생시켜 실행대기 상태로 가거나 종료
  • notify(), notifyAll() : wait() 발생된 일시 정지 상태에 있는 스레드를 실행 대기 상태로 만듦.
  • resume(): suspend()에 의해 일시 정지 상태에 있는 스레드를 실행 대기 상태로 만듦
  • sleep(milisec): 주어진 시간동안 일시정지, 시간이 지나면 자동으로 실행 대기
  • join(): 호출한 스레드 일시 정지. join() 메서드를 멤버로 가지는 스레드가 종료되거나 시간이 지날 때 실행대기
  • yield(): 다른 스레드에 실행을 양보, 실행대기 상태
  • stop(): 스레드 즉시 종료


'programming > java' 카테고리의 다른 글

[java] 정규 표현식  (0) 2017.06.01
[java] StringBuilder, StringBuffer의 차이  (0) 2017.06.01
[java] Collection  (2) 2017.05.15
싱글톤(Singleton)  (6) 2017.05.11
[java] jdbc를이용한 oracle database 연결  (4) 2017.05.11