【发布时间】:2021-12-06 19:40:41
【问题描述】:
假设我有这个代码块:
List<Integer> lst = Collections.synchronizedCollection(new ArrayList<>());
而我有以下两种方法:
public Integer returnFirst() {
lst.get(0);
}
public void iterate() {
synchronized(lst) {
Iterator i = lst.iterator();
while (i.hasNext()) {
System.out.println(i);
}
}
}
假设一个线程调用iterate(),然后另一个线程调用returnFirst()。由于您在迭代中同步 List 对象,并且迭代当前正在运行,因此 returnFirst() 会被阻止吗?
【问题讨论】:
-
你的代码能编译吗?
-
没有。该关键字用于排队任务,除非
returnFirst()与同一个 object 同步。 -
@Darkman - lst 是内部同步的。
标签: java multithreading synchronization