ThreadPoolExecutor 和 ArrayBlockingQueue
ThreadPoolExecutor and ArrayBlockingQueue
请原谅我的英语不好。
当池中的线程数上升到 10 以上时,任务将被放入 ArrayBlockingQueue 中。但如果任务可调用呢?构造函数 ThreadPoolExecutor 不接受类型为 Callable 的 ArrayBlockingQueue。那么,如何将任务添加到队列中呢?
ExecutorService executorService = new ThreadPoolExecutor(2, 10,
60L, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(100));
发生的情况是 ThreadPoolExecutor
没有直接将您的 Callable
添加到队列中。相反,它会将 Callable
包装成 RunnableFuture
通过调用方法 AbstractExecutorService.newTaskFor(Callable),然后将此 RunnableFuture
添加到队列中。
请原谅我的英语不好。 当池中的线程数上升到 10 以上时,任务将被放入 ArrayBlockingQueue 中。但如果任务可调用呢?构造函数 ThreadPoolExecutor 不接受类型为 Callable 的 ArrayBlockingQueue。那么,如何将任务添加到队列中呢?
ExecutorService executorService = new ThreadPoolExecutor(2, 10,
60L, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(100));
发生的情况是 ThreadPoolExecutor
没有直接将您的 Callable
添加到队列中。相反,它会将 Callable
包装成 RunnableFuture
通过调用方法 AbstractExecutorService.newTaskFor(Callable),然后将此 RunnableFuture
添加到队列中。