Java/Executor Service
-
Future를 활용하여 Timeout 구현하기Java/Executor Service 2024. 4. 7. 22:21
개요 코루틴 Timeout이 제대로 동작하지 않은 이유라는 글을 작성하며 코루틴을 활용하여 Timeout을 구현해 보았습니다. 동기적인 코드가 섞여있는 상황이라면 코루틴에 협조적이지 않아 타임아웃이 잘 동작하지 않았던 이슈가 있었고 새로운 스레드를 할당하여 문제를 해결했지만 타임아웃이 발생하더라도 비동기적으로 실행되는 코드들이 계속 동작하는 문제가 있었습니다. 이 문제를 해결하기 위해서 Java 1.5부터 Future를 활용해 볼 수 있습니다. Future란? Future submit(Callable task); Future submit(Runnable task); ExecutorService에서 Runnable, Callable Task에 대해 submit 메서드를 활용하면 Future에 대한 반환값을..
-
ScheduledThreadPoolExecutor란?Java/Executor Service 2024. 3. 17. 19:29
개요 ScheduledThreadPoolExecutor라는 개념을 알게 되어 이해해보고자 합니다. 해당 글을 읽기 전 Future, ThreadPool, ExecutorService, ThreadPoolExecutor 개념에 대해 잘 모른다면 다음 글을 읽고 오시면 좋습니다. ExecutorService란? ThreadPoolExecutor란? ScheduledThreadPoolExecutor란? val fixedThreadPool = Executors.newFixedThreadPool(2) val scheduledThreadPool: ExecutorService = Executors.newScheduledThreadPool(2) //newScheduledThreadPool 내부 구현은 Scheduled..
-
ThreadPoolTaskExecutor란? (ThreadPoolTaskExecutor vs ThreadPoolExecutor)Java/Executor Service 2023. 10. 21. 00:01
ThreadPoolTaskExecutor란? public class ThreadPoolTaskExecutor extends ExecutorConfigurationSupport implements AsyncListenableTaskExecutor, SchedulingTaskExecutor { private final Object poolSizeMonitor = new Object(); private int corePoolSize = 1; private int maxPoolSize = Integer.MAX_VALUE; private int keepAliveSeconds = 60; private int queueCapacity = Integer.MAX_VALUE; private boolean allowCore..
-
ThreadPoolExecutor란?Java/Executor Service 2023. 10. 20. 00:01
ThreadPoolExecutor란? public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue()); } Executors의 클래스의 메서드에서 고정된 스레드풀의 개수를 반환하는 newFixedThreadPool에서는 내부적으로 ThreadPoolExecutor를 생성하여 반환합니다. newFixedThreadPool을 호출할 때는 스레드의 개수만 지정해 주면 되지만 내부적으로는 기본적인 값들이 세팅돼서 제공됩니다. // Executors를 사용해서 간편하게 스레드풀 ..
-
ExecutorService란?Java/Executor Service 2023. 10. 19. 00:01
Executor란? public interface Executor { void execute(Runnable command); } ExecutorService가 Executor 인터페이스를 구현하고 있습니다. Executor 인터페이스는 Runnable 객체를 미래의 어느 시점에 주어진 명령으로 실행합니다. Runnable이란? @FunctionalInterface public interface Runnable { public abstract void run(); } Runnable 인터페이스는 인스턴스가 스레드에 의해 실행되는 의도된 모든 클래스에서 구현합니다. 예를 들어 Runnable 인터페이스는 Thread 클래스가 구현하고 있습니다. 스레드를 시작하면 별도의 실행 중인 스레드에서 객체의 run ..
-
Java Executors - ScheduledExecutorServiceJava/Executor Service 2023. 6. 15. 00:01
개요 Socket을 Connect 하고 5분 후 timeout을 발생시키기 위해 ScheduledExecutorService를 활용하게 되었고, 이에 대해 자세하게 알아보고자 합니다. Executor 인터페이스 동시에 여러 요청을 처리해야 하는 경우 매번 새로운 쓰레드를 만드는 것은 비효율적입니다. 따라서 쓰레드를 미리 만들어두고 재사용하는 Thread Pool이라는 개념이 등장하게 되었고 Executor는 쓰레드 풀의 구현을 위한 인터페이스입니다. public interface Executor { void execute(Runnable command); } 쓰레드는 크게 작업의 등록과 실행으로 나누어집니다. 이때 Executor는 등록된 작업(Runnable)을 실행하기 위한 인터페이스이며, 작업의 실..