【发布时间】:2017-11-29 18:21:20
【问题描述】:
假设我们有一个多线程应用程序和一个具有以下变量和方法的类:
private List list = new ArrayList();
public void doNothing() {
synchronized (list) {
list.get(0);
String stuff = "Stuff";
list.get(0);
}
}
当一个线程处理方法 doNothing() 时,它会失去对 String stuff = "Stuff"; 的监控,并且 list.get(0); 的输出可能会有所不同,因为其他线程可以修改列表,我对吗?
【问题讨论】:
-
stuff在您的示例中不受监控,list.get(0)可能会或可能不会返回不同的值,具体取决于更新时修饰符是否在列表上同步。 -
首先,这取决于锁定其他线程正在做什么(如果有)。
-
没有。列表中的监视器一直保持到同步块结束。
-
...
String stuff与其余代码有什么关系?联系真的不清楚。
标签: java multithreading synchronization