- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
线程池与任何 ExecutorServices 一样,我们定义了一个大小为 3 的新固定池。现在我有一个包含大约 10000 个可运行任务的队列。对于执行上述过程,我有这些疑问 -
要执行上述流程,执行者是否会一次只让任务队列中的 3 个线程运行?
Pool 将承载 3 个 Threads ,而这 3 个线程将只负责执行所有 10000 个任务。如果它是正确的,单个线程如何运行不同的可运行任务,因为最终这些任务也是线程本身,并且在任何作业/任务的运行过程中,您可以为池线程分配新的责任。
最佳答案
是的,如果您实际上正在使用 Executors.newFixedThreadPool(3)
10,000 个任务不是线程
,它们只是Runnables
。 Thread
必须通过Thread#start
启动才能真正创建系统线程。任务(Runnable
的实例)被放置在 BlockingQueue
中。线程池中的线程将轮询 BlockingQueue 以寻找要运行的任务。当他们完成任务时,他们返回到队列中去拿另一个。如果添加了更多任务,则根据该队列的实现规则将它们插入到 BlockingQueue
中。对于大多数队列来说,这是先进先出的,但是 PriorityQueue
实际上使用 Comparator
或自然顺序来对插入的任务进行排序。
关于java - Java 中的线程池究竟在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10360974/
Feel free to skip straight to TL/DR if you're not interested in details of the question 简短的序言: 我最近决定
我一直在阅读 A Tour of Go学习Go-Lang到目前为止一切顺利。 我目前在 Struct Fields类(class),这是右侧的示例代码: package main import "fm
Last time I got confused顺便说一下PowerShell急切地展开集合,基思总结了它的启发式如下: Putting the results (an array) within a
我是一名优秀的程序员,十分优秀!