idea 同步代码块在debug模式下失效
案例:线程安全的集合
package test;
import java.util.ArrayList;
import java.util.List;
//线程安全的集合
public class UnsafeList {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
for (int i = 0; i < 5000; i++) {
new Thread(() -> {
synchronized (list) {
list.add(Thread.currentThread().getName());
}
}).start();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(list.size());
}
}
不知道同步代码块为什么失效?造成原因:debug模式启动
debug:1715
run: 5000
debug模式和run模式运行结果不同
如果代码不做干预,多线程的执行结果是不稳定的。
debug模式因为idea会不断的抓取内存快照,会在一定程度上影响线程的调度,从而导致结果和普通模式有较明显的区别。