인프런 강의 "더 자바, JAVA8"(백기선님)의 강의를 듣고 정리한 글 입니다.
JAVA8에 추가된 핵심 기능들을 이해하기 쉽게 설명해 주시니 한번씩 들어보시는 것을 추천드립니다.
고수준 Concurrency 프로그래밍
public class App {
public static void main(String[] args) throws Exception{
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(() ->
System.out.println("Thread : " + Thread.currentThread().getName()));
executorService.shutdown(); // 셧다운을 해주지 않으면 종료가 되지 않는다.
}
}
현재는 싱글스레드로 만들었지만 여러개의 스레드를 만들 수도 있다.
public class App {
public static void main(String[] args) throws Exception{
ExecutorService executorService = Executors.newFixedThreadPool(2); // 쓰레드 2개
executorService.submit(getRunnable("hi"));
executorService.submit(getRunnable("hi"));
executorService.submit(getRunnable("hi"));
executorService.submit(getRunnable("hi"));
executorService.submit(getRunnable("hi"));
executorService.shutdown();
}
private static Runnable getRunnable(String msg) {
return () -> System.out.println("msg " + msg + ":" + Thread.currentThread().getName());
}
}
실행 결과
msg hi:pool-1-thread-1
msg hi:pool-1-thread-2
msg hi:pool-1-thread-1
msg hi:pool-1-thread-2
msg hi:pool-1-thread-1
이렇게 쓰레드 두개를 사용을 해서 작업을 하는 것을 확인할 수 있습니다.
public class App {
public static void main(String[] args) throws Exception{
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.schedule(getRunnable("hi"), 3, TimeUnit.SECONDS); // 3초 후 실행하라
service.shutdown();
}
private static Runnable getRunnable(String msg) {
return () -> System.out.println("msg " + msg + ":" + Thread.currentThread().getName());
}
}
executorService.shutdown(); // 처리중인 작업 기다렸다가 종료
executorService.shutdownNow(); // 당장 종료