Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java同步很奇怪_Java_Synchronization - Fatal编程技术网

Java同步很奇怪

Java同步很奇怪,java,synchronization,Java,Synchronization,我正在学习java中的同步,我在互联网上找到了一个简单的例子,但是根据我所学的关于同步的知识,它应该不起作用 守则: public class PizzaHouse { boolean pizzaArived = false; synchronized void eatPizza(){ while (!pizzaArived){ try{ System.out.println("waiting");

我正在学习java中的同步,我在互联网上找到了一个简单的例子,但是根据我所学的关于同步的知识,它应该不起作用

守则:

public class PizzaHouse {

boolean pizzaArived = false;

synchronized void eatPizza(){
    while (!pizzaArived){
        try{
            System.out.println("waiting");
            wait();
        } catch (InterruptedException e){

        }
    }
    System.out.println("Eating pizza");
}


synchronized void deliverPizza(){
    pizzaArived = true;
    System.out.println("Pizza delivered");
    notifyAll();
}
}

主要代码:

public class Main {
public static void main(String[] args) {
    PizzaHouse pizzaHouse = new PizzaHouse();

    Thread threadDelivering = new Thread(() -> pizzaHouse.deliverPizza());
    Thread threadEating = new Thread(() -> pizzaHouse.eatPizza());

    threadEating.start();
    threadDelivering.start();
}
}

问题是,据我所知,这会导致僵局。假设:

  • 穿线工要求锁
  • 吃线开始等待
  • ThreadDelivery尝试声明锁,但无法
  • ->死锁,因为线程将永远不会被通知,也永远不会释放锁


    然而,当我执行该代码时,它是有效的。有什么假设吗?

    等等
    释放锁哦,太感谢了,我忘了检查文档