Java ExecutorService에 대하여

ExecutorService ExecutorService를 사용하면 간단하게 스레드풀을 생성해서 병렬처리를 할 수 있습니다. Executors의 스태틱 메서드를 통해 간단하게 ExecutorService를 사용할 수 있습니다. 생성자를 이용해 커스텀하게 생성할 수도 있습니다. 이상적인 풀 사이즈 Task Type Ideal pool size Considerations CPU bound CPU Core count 얼마나 많은 작업이 같은 CPU에서 동작하는지 (Context switching 비용) I/O bound High 각 작업의 평균 대기 시간, 너무 큰 스레드 풀은 메모리 사용량을 고려해야함. int coreCount = Runtime.getRuntime().availableProcessors(); // int coreCount = taskExecutionProperties....

July 14, 2023 · 조민준

사소한 Thread-safe Tips

가능하다면 로컬 변수를 사용합니다. 프레임워크에 위임합니다. e.g. RequestContextHolder ConcurrentHashMap 같은 요소를 ThreadLocal 변수로 변경할 수 있는지 검토합니다. public class UserContextHolder { public static ThreadLocal<User> holder = new ThreadLocal(); } class HoldingService { public void holdUser() { // Set user for this thread User user = getUser(); UserContextHolder.holder.set(user); } } class SomeService { public void getUser() { // Get user for this thread User user = UserContextHolder.holder.get(); // Remove user; user no longer required UserContextHolder....

July 13, 2023 · 조민준