시간 제한이 있는 Interruptible ExecutorService
시간이 많이 걸리는 작업을 병렬로 실행할 때 작업이 리소스를 무기한 점유하지 않도록 실행 시간 제한을 제어하는 것이 중요합니다. . 이 기사에서는 이러한 시간 초과 기능을 제공하는 ExecutorServices의 기존 구현을 살펴봅니다.
한 가지 솔루션은 작업 실행을 모니터링하고 미리 정의된 시간 초과를 초과하는 모든 것을 중단시키는 아래 기여자가 고안한 맞춤형 ExecutorService입니다.
import java.util.List; import java.util.concurrent.*; public class TimeoutThreadPoolExecutor extends ThreadPoolExecutor { // Timeout configuration private final long timeout; private final TimeUnit timeoutUnit; // Task and timeout scheduling private final ScheduledExecutorService timeoutExecutor = Executors.newSingleThreadScheduledExecutor(); private final ConcurrentMap<Runnable, ScheduledFuture> runningTasks = new ConcurrentHashMap<>(); // Initialize with timeout and scheduling options public TimeoutThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, long timeout, TimeUnit timeoutUnit) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue); this.timeout = timeout; this.timeoutUnit = timeoutUnit; } // ExecutorService lifecycle management @Override public void shutdown() { timeoutExecutor.shutdown(); super.shutdown(); } @Override public List<Runnable> shutdownNow() { timeoutExecutor.shutdownNow(); return super.shutdownNow(); } // Monitor task execution and initiate timeouts @Override protected void beforeExecute(Thread t, Runnable r) { if (timeout > 0) { final ScheduledFuture<?> scheduled = timeoutExecutor.schedule(new TimeoutTask(t), timeout, timeoutUnit); runningTasks.put(r, scheduled); } } // Handle tasks after completion and cancel timeouts @Override protected void afterExecute(Runnable r, Throwable t) { ScheduledFuture timeoutTask = runningTasks.remove(r); if (timeoutTask != null) { timeoutTask.cancel(false); } } // Task responsible for interrupting long-running tasks class TimeoutTask implements Runnable { private final Thread thread; public TimeoutTask(Thread thread) { this.thread = thread; } @Override public void run() { thread.interrupt(); } } }
이 사용자 정의 구현은 작업 실행을 모니터링하고 시간 초과를 적용하는 편리하고 효율적인 방법을 제공하여 멀티스레드에서 예측 가능한 작업 동작을 보장합니다. 환경입니다.
위 내용은 Java에서 시간 제한이 있는 Interruptible ExecutorService를 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!