본문 바로가기

프로그래밍 /JAVA

[Java] Thread(쓰레드)

Thread란??



 - 프로세스내에서의 제어 흐름(하나의 실행 단위)

  - CPU이용량 단위의 기본, 각 스레드마다 PCB를 가지고 있다.

  - 같은 프로세스에 속한 각 쓰레드들은 공유 가능 -> 프로세스를 여러개 띄운것과 차이



멀티쓰레드


동시에 여러가지 작업을 동시에 수행할 수 있게하는것



  •  자원을 효율적으로
  • 응답성이 향상
  • 작업이 분화되어 코드가 간결




※ 동기화에 주의

※ 교착상태가 발생하지 않도록 주의

※ 각 쓰레드가 효율적으로 고르게 실행되게 해야한다.




쓰레드 구현 및 실행



1.Thread클래스 상속 // 클래스의 run을 오버라이딩

2. Runnable 인터페이스 구현 // 인터페이스의 run을 구현 


















1)호출

static Thread currentThread() 현재 실행중인 쓰레드를 참조 반환

String getName() 쓰레드 이름을 반환 


2)실행 

참조변수.start(); 호출해서 실행 


데몬쓰레드



일반쓰레드의 작업을 돕는 보조적인역할

일반쓰레드가 종료되면 자동 종료

boolean isDaemon() 쓰레드가 데몬쓰레드인지 확인 (데몬쓰레드=TRUE)

 ●void setDaemon(boolean on) 쓰레드를 데몬 쓰레드로 또는 사용자 쓰레드로 변경

매개 변수 on의 값을 true로 지정하면 데몬쓰레드가 된다. 


쓰레드 실행제어


sleep (long millis) -일정시간동안 쓰레드를 멈추게 한다.


일시정지 상태가 쓰레드가 interrupt() 가 호출되면 InterruptException 이발생하면 실행대기가 되므로 

sleep을 호출할 때는 try -catch 문으로 예외처리를 해주어야 한다'



Interrupt() , Interrupted ()- 쓰레드의 작업을 취소 


쓰레드의 작업이 끝나기전에 취소시켜야 할일이 생길때 


  • void interrupt()   쓰레드의 interrupted상태를 false에서 true로 변경
  • boolean isInterrupted() 쓰레드 상태 변환( TRUE,FALSE)
  • static boolean interrupted() 현재 쓰레드의  interrupted 상태를 반환후, false로 변경

 




※※참고 

사용은 가능하지만 deprecated 되어버린 메서드 (사용하지 않기를 권장!!) 

suspend() 잠시 멈춤

resume()재실행

stop()