Hello! 欢迎来到小浪资源网!


Java线程同步中wait方法导致结果异常的原因是什么


Java线程同步中wait方法导致结果异常的原因是什么

Java线程同步中wait方法导致意外结果的原因

在java线程同步中,使用wait方法有时会导致与预期不符的结果。一个常见的错误是将判断条件放入synchronized块之外。

在给定的示例中,对变量i的判断(i

在这种情况下,即使其中一个线程在wait之后的值为5,也有可能因为判断条件i

立即学习Java免费学习笔记(深入)”;

为了避免这种情况,需要将判断条件放入synchronized块内。通过将判断条件放在synchronized块中,我们可以确保线程在进入循环时不会有其他线程修改i的值。

修改后的numplus1类代码如下:

public class NumPlus1 implements Runnable {     int i = 0;      @Override     public void run() {         Thread now = Thread.currentThread();         while (true) {             synchronized (this) {                 if (i < 5) {                     System.out.println(now.getName() + ":" + i++);                     try {                         wait(1000);                     } catch (InterruptedException e) {                         throw new RuntimeException(e);                     }                 }             }         }     } }

通过将判断条件放入synchronized块内,我们可以确保线程在每次进入循环时都会检查i的值,从而保证结果符合预期。

相关阅读