안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
스레드 풀 작업 생성 :
Runnable 이나 Callable 구현 클래스로 하나의 작업을 표현합니닷
위 두 가지의 차이는 작업 처리를 완료한 후 리턴값이 있나 없나의 차이입니다.
Runnable 구현 클래스는 리턴값이 없습니다.
Runnable task = new Runnable() {
@Override
public void run() {
//실행 코드
}
}
Callable 구현 클래스는 리턴값이 있습니다.
Callable<T> task = new Callable<T> {
@Override
public T call() throws Exception {
//실행 코드
return T
}
}
call() 의 리턴 타입은 implements Callable<T>에서 지정한 T타입입니다.
ex) String
스레드 풀의 스레드는 작업 큐에서 Runnable or Callable 객체를 가져와서
run() or call()을 실행.
스레드 풀 작업 처리 요청
ExecutorService의 작업 큐에 Runnable or Callable 객체를 넣는 행위를 말합니다.
ExecutorService는 작업 처리를 위해 메소드를 제공
리턴 타입 : void
메소드명(매개변수) : execute(Runnable command)
설명 : -Runnable을 작업 큐에 저장은 하지만 작업처리 결과를 받지 못합니다.
==========================================================
리턴타입 메서드명(매개변수) 설명
Future<?> submit(Runnable r) Runnable or Callable을 작업 큐에 저장
Future<V> submit(Runnable r, V result) 리턴된 Future를 통해 작업 처리 결과 받음
Future<V> submit(Callable<V> c)
execute()와 submit()은 차이점이 두가지 있음.
1. execute()는 리턴값 x
submit()은 작업처리 결과 받도록 Future() 리턴
2. execute()는 작업 처리 중 예외 발생 시 스레드 종료 후 해당 스레드 스레드 풀에서 제거
=> 다른 작업 처리를 위해 스레드 풀은 새로운 스레드 생ㅇ성
submit()은 스레드가 종료되지 않고 다음 작업을 위해 재사용
===> 스레드 생성 오버해더를 줄이기 위해 submit()을 사용하는 것을 추천
'자바' 카테고리의 다른 글
자바 스레드풀 ThreadPool : 블로킹 방식 작업 완료 통보 => 작업 처리 결과 외부에 저장, 작업 완료 순 통보 (0) | 2017.03.17 |
---|---|
자바 스레드풀 ThreadPool : 블로킹 방식 작업 완료 통보 => 리턴값이 없는 작업 완료 통보 및 리턴값이 있는 작업 완료 통보 (0) | 2017.03.17 |
자바 스레드풀 ThreadPool : 스레드풀 생성과 스레드풀 종료 (0) | 2017.03.17 |
JAVA Thread 자바 스레드 : 스레드 그룹 이름 얻기 / 스레드 그룹 생성 / 스레드 그룹의 일괄 inerrupt() /// 스레드 그룹 생성 / 스레드 그룹의 일괄 inerrupt() (0) | 2017.03.15 |
JAVA 자바 Thread 자바 스레드 : 데몬 스레드 (0) | 2017.03.15 |