자바 애플리캐이션은 메인(main) 스레드가 main() 메소드를 실행시킨다.
작업 스레드 클래스는 Thread 클래스를 상속 해서 만들 수 있다.
Runnable 객체는 스레드가 실행해야할 코드를 가지고 있는 객체라고 볼 수 있다.
스레드를 만드는 방법,? 종류?
1. 클래스 extends Thread 스레드를 상속받고 run()메소드를 오버라이딩
2. 클래스 implement Runnable Runnable을 구현한 클래스를
다른 곳에서 생성자로 호출
Thread thread = new Thread(new 클래스 ) 호출
3. 익명객체로 Runnable 구현 (람다식 가능)?
스레드의 우선순위
동기화 메소드와 동기화 블록 synchronized
스레드 일시 정지상태
스레드 상태 제어 메소드
public class ThreadExample {
public static void main(String[] args) {
Thread thread = new MovieThread();
thread.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// interrupt() 실행 일정지가 되면 InterruptedException 발생
thread.interrupt();
}
}
public class MovieThread extends Thread {
@Override
public void run() {
while (true) {
System.out.println("동영상을 재생합니다.");
// 방법 1
// Thread.sleep(1000) 일지 정지 상태로 만듬.
// 일시정지가되면 InterruptedException 발생
// catch부분에서 break; 실행
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
break;
}
//방법 2
// this.isInterrupted()
if (Thread.interrupted()) {
break;
}
}
}
}
while 문으로 반복저인 작업을 하는 스레드를 종료 시키는 방법 !
조건식에 boolean 타입의 stop 플래그를 이용해서 while 문을 빠져나가게 한다.
스레드가 반복적으로 일시 정지 상태가 된다면 InterruptedException 을 발생시켜 예외처리 코드에서 break문으로 while 문을 빠져나가게 한다.
스레드가 일시 정지 상태로 가지 않는다면 islnterrupted() 나 interrupted() 메소드의 리턴값을 조사해서 true일 경우 break 문으로 while 문을 빠져나가게 한다.
데몬 스레드
스레드풀
갑작스러운 작업의 증가로 스레드의 폭증을 막기위해 사용된다.
ExecutorService 객체가 스레드풀이며 newFixedThreadPool0 메소드로 얻을 수 있다.
작업은 Runnable 또는 Callable 인터페이스를 구현해서 정의한다.
Future (지연완료객체, 지연객체)
Future 는 스레드가 처리한 작업의 결과값을 얻어 내는 객체이다.
submit 메소드를 호출하면 즉시 리턴되는 객체이다.
Future 의 get 메소드는 스레드가 작업을 완료하기 전까지 블로킹된다.
CompletionService를 이용하면 작업 완료된 순으로 Future를 얻을 수 있다.
'JAVA > JAVA' 카테고리의 다른 글
제네릭(Generic) 타입의 상속과 구현 (0) | 2018.06.09 |
---|---|
제네릭(Generic) 와일드카드 타입 (0) | 2018.06.09 |
제네릭(Generic) 메소드 (0) | 2018.06.08 |
제네릭(Generic)이란 ? 제네릭 타입이란? (0) | 2018.06.08 |
자바 기본 변수 (0) | 2018.05.08 |