|
|
1
55
(与其他答案相反)线程安全合同
是
这足以回答这个问题:
无法保证未来任务将在什么时候执行或完成(有些甚至可能在提交任务的同一线程上立即执行),但可以保证工作线程已经看到提交线程执行的所有效果 因此,(运行的线程)您的任务还可以安全地读取为其使用而创建的任何数据,而无需同步、线程安全类或任何其他形式的“安全发布”。提交任务的行为本身就足以将输入数据“安全发布”到任务中。您只需要确保在任务运行时不会以任何方式修改输入数据。
同样,当您通过以下方式获取任务结果时
该合同还意味着任务本身可以提交更多任务。
现在,这部分问题要笼统得多。例如,找不到关于该方法的线程安全契约的任何声明
顺便说一句,我推荐《Java并发实践》一书,作为并发编程世界的良好基础。 |
|
|
2
31
确实,所讨论的JDK类似乎没有明确保证线程安全的任务提交。然而,在实践中,库中的所有ExecutorService实现确实以这种方式是线程安全的。我认为依赖这个是合理的。由于实现这些功能的所有代码都放在公共领域,因此任何人都没有动机以不同的方式完全重写它。 |
|
|
3
9
你的问题相当开放:所有
如果提交
编辑
根据Brian的评论,如果我误解了你的问题:将多个生产者线程的任务提交给
|
|
|
4
6
所以你的标题问题的答案很明显 是 可能 |
|
|
5
2
与答案相反
Luke Usherwood
先行发生 指定了关系,但这并不意味着方法本身的线程安全性,正如注释所述 Miles .In 卢克·乌斯伍德 他的回答是,前者足以证明后者,但没有提出实际的论点。
“线程安全”可能意味着各种各样的东西,但这里有一个简单的反例
免责声明:我不是专家,我发现这个问题是因为我自己在寻找答案。 |
|
|
6
2
对于ThreadPoolExecutor,它的提交是线程安全的。您可以在jdk8中看到源代码。添加新任务时,它使用mainLock来确保线程安全。
|
|
|
user29759326 · 如何返回递归函数中的最后一个值? 11 月前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 11 月前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 11 月前 |
|
pebble unit · 如何检查以前缀开头、以后缀结尾的属性(不是属性值) 11 月前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |