关于有效java 2 char 10第66项
测试5次 代码A将导致 预计时间:23,休息时间:977 预计时间:45,休息时间:955 预计时间:174,中断时间:825 预计时间:207,中断时间:793 预计时间:175,中断时间:825 代码A关于有效java 2 char 10第66项,java,concurrency,Java,Concurrency,测试5次 代码A将导致 预计时间:23,休息时间:977 预计时间:45,休息时间:955 预计时间:174,中断时间:825 预计时间:207,中断时间:793 预计时间:175,中断时间:825 代码A while (!stopRequested) { j++; // System.out.println("brokenStopMultiThread " + copy + " " + j++); } 代码B将导致 预计时间:1000,中断时间:0 预计时间:999,中断时间
while (!stopRequested) {
j++;
// System.out.println("brokenStopMultiThread " + copy + " " + j++);
}
代码B将导致
预计时间:1000,中断时间:0
预计时间:999,中断时间:0
预计时间:1000,中断时间:0
预计时间:1000,中断时间:0
预计时间:1000,中断时间:0
代码B
while (!stopRequested) {
try {
TimeUnit.MILLISECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
j++;
// System.out.println("brokenStopMultiThread " + copy + " " + j++);
}
所有线程都在不同的运行时停止,可能在jdk8上不容易发生活动性故障系统中的某个地方隐藏了一个volatile
PrintWriter
?这个循环太紧;添加一个迷你睡眠模式here@ScaryWombat谢谢你,谢谢works@chrylisPrintStream#println(java.lang.String)有一个同步的代码块,但这不是reason@omottec为什么不是呢,因为每个线程中都有一个println
?
while (!stopRequested) {
try {
TimeUnit.MILLISECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
j++;
// System.out.println("brokenStopMultiThread " + copy + " " + j++);
}
while (!stopRequested) {
/*try {
TimeUnit.MILLISECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
j++;*/
System.out.println("brokenStopMultiThread " + copy + " " + j++);
}