我有一个ThreadPoolExecutor
,它的submit
方法可以由多个线程并发调用。我想知道ThreadPoolExecutor
将如何处理这个问题。我不认为submit
从源代码中是原子的,尽管我可能遗漏了一些东西。事先谢谢您的建议。
发布于 2022-08-21 13:23:34
在submit()时,ExecutorService
依赖于它的BlockingQueue
进行同步。
初始化执行器时,必须提供一个队列实例,用于存储所有子任务,并用作线程池读取的源。
对于从Executors
固定大小工厂方法之一初始化的执行器,内部使用LinkedBlockingQueue
。
当提供要存储的新条目时,LinkedBlockingQueue
内部使用ReentrantLock
来锁定和同步
只要您使用用于队列的java.util.concurrent
实现,并发提交就可以正常工作。
https://stackoverflow.com/questions/73434093
复制相似问题