Java_author在5.3.1节中提到了
...许多 生产环境 者 - 消费者设计可以使用Executor任务执行框架来表达,该框架本身使用 生产环境 者 - 消费者模式 . ... 生产环境 者 - 消费者模式提供了一种线程友好的方法,可以将问题分解为更简单的组件(如果可能) .
Executor框架实现是否内部遵循 生产环境 者 - 消费者模式?
如果是,那么 生产环境 者 - 消费者模式的概念如何有助于实施Executor框架?
Java_author在5.3.1节中提到了
...许多 生产环境 者 - 消费者设计可以使用Executor任务执行框架来表达,该框架本身使用 生产环境 者 - 消费者模式 . ... 生产环境 者 - 消费者模式提供了一种线程友好的方法,可以将问题分解为更简单的组件(如果可能) .
Executor框架实现是否内部遵循 生产环境 者 - 消费者模式?
如果是,那么 生产环境 者 - 消费者模式的概念如何有助于实施Executor框架?
2 回答
检查ThreadPoolExecutor的实施
现在检查
执行
Worker
:要执行哪个
Runnable
取决于以下逻辑 .综上所述:
Producer 在
execute
API中添加Runnable
或Callable
与workQueue.offer(command)
execute()
方法根据需要创建Worker
线程这个
Worker
线程以无限循环运行 . 它从getTask()
获取任务(例如Runnable
)在
BlockingQueue<Runnable> workQueue)
上getTask()
个池并取Runnable
. 它是 consumer 的BlockingQueue
.是的,如上所述 .
BlockingQueue
实现如ArrayBlockingQueue
和ExecutorService
implementationThreadPoolExecutor
是线程安全的 . 程序员明确实现同步,等待和通知调用以实现相同的开销已经减少了 .Executor framework
使用producer-consumer
模式 .来自维基百科,
如果我们看一下不同的
ExecutorService framework
实现,更具体地说是ThreadPoolExecutor
类,它基本上有以下内容:提交和保留作业的队列
使用提交到队列的任务的线程数 .
根据执行程序服务的类型,这些参数会发生变化
例如,
固定线程池使用
LinkedBlockingQueue
和用户配置的没有线程缓存线程池根据提交的任务数使用
SynchronousQueue
和0
到Integer.MAX_VALUE
之间没有线程