ScheduledThreadPoolExecutor.getQueue()
返回BlockingQueue<Runnable>
。此出现是执行程序使用的实际队列。从另一个线程迭代这个是否安全?修改它是否安全?
答案 0 :(得分:0)
从另一个线程迭代这个是否安全?
Yes.
BlockingQueue
是线程安全的。所有排队方法都使用内部锁或其他形式的并发控制以原子方式实现其效果。有关详细信息,请查看此docs。
答案 1 :(得分:0)
迭代BlockingQueue
从Javadoc中记住警告是安全的
“无法保证对此队列的迭代遍历该队列中的任务 他们将执行的顺序。“
从一个线程修改BlockingQueue
并在另一个线程中查看它是安全的,只要你记得对实际Runnable对象上的字段的任何修改都只会显示在另一个线程中他们已被宣布为volatile
。