티스토리 뷰
자바 쓰레드 Runnable Callable 차이 - featExecutorService, Future
xemaker 2023. 2. 28. 14:56자바 쓰레드는 Runnable, Callable을 쓸 수 있다.
두개의 차이점이 궁금할 텐데 같이 한번 살펴보자.
간단한 예제로 빠르게 살펴봅니다.
class ThreadRunner implements Runnable{
public void run() { System.out.println("Runnable"); }
}
class ThreadCaller implements Callable{
public String call() throws Exception{
return "Callable";
}
}
public class Test{
public static void main(String[] args) throws InturruptedException, ExecutionException{
ExecutorService es = Executors.newSingleThreadExecutor();
Runnable r1=new ThreadRunner();
Callable c1=new ThreadCaller();
es.execute(r1);
es.execute(c1); //컴파일 에러. 파라미터로 callable이 왔기 때문에. execute는 runnable만 가능하다.
es.submit(r1);
es.submit(c1);
Future<String> f1=es.submit(c1);
//System.out.println(f1.get());
es.shutdown();
}
}
컴파일에러가 나는 es.execute(c1)을 주석처리 후 실행해보면 결과는
Runnable
Runnable
Callable
이렇게 출력될 것이다.
먼저 ExecutorService에 관해 설명하면
작업큐에 Runnable 혹인 Callable 객체를 넣는 행위이다.
작업처리 요청을 위해 execute(), submit() 메소드를 제공한다.
- execute() : Runnable을 작업큐에 저장
- submit() : Runnable 또는 Callable을 작업큐에 저장, Future 객체를 리턴
위의 내용만 이해하면 쉽다.
봤다시피 ExecutorService는 execute(), submit() 메소드를 제공하며 execute() 메소드는 Runnable만 파라미터로 사용할 수 있다.
그런데 es.execute(c1) 처럼 Callable을 파라미터로 쓰려고 했으니 컴파일 에러가 발생한다.
es.submit(r1) es.submit(c1) 은 정상이다. submit은 Runnable 및 Callable을 사용할 수 있다.
Callable을 제대로 사용하려면 리턴값을 받아서 써야 하니 Future을 사용해서 찍어보면 Callable의 정확한 사용법을 알 수 있다.
'ocajp 자격증 (Oracle Certified Associate Ja' 카테고리의 다른 글
자바 경로 File io 시 파일명 윈도우 (0) | 2022.10.24 |
---|---|
자바 static{} block 스태틱 블록의 의미 (0) | 2020.03.22 |
ocjap 문제 해설 - Class50 (0) | 2020.03.06 |
ocjap 문제 해설 - ArrayList 55 (0) | 2020.03.05 |
ocjap 문제 해설 - String 60 (0) | 2020.03.05 |
- Total
- Today
- Yesterday
- XE3
- webix
- 파싱
- 이클립스
- 포인터
- 프로씨
- xe애드온
- esql
- xe addon
- 플러터
- 파이썬
- KG
- 문자열
- C
- MySQL
- EC
- XE
- proc
- 인포믹스
- php
- 자바
- ocajp
- JDBC
- 스크래핑
- Python
- 오라클
- 자바 smtp
- C언어
- ocjap
- 라이믹스 모듈
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |