티스토리 뷰
자바 쓰레드 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
- 문자열
- C언어
- 자바
- C
- ocpjp
- XE3
- 스크래핑
- XE
- EC
- esql
- webix
- ocajp
- 이클립스
- MySQL
- Python
- 포인터
- 파이썬
- 자바 smtp
- 파싱
- ocjap
- KG
- 인포믹스
- 오라클
- 프로씨
- JDBC
- xe애드온
- xe addon
- 플러터
- php
- proc
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |