【发布时间】:2021-06-12 16:13:39
【问题描述】:
我是 Java 基本并发的新手。 据我了解,如果只有一个线程处于活动状态而其他线程正在等待,则同步块中可能有多个线程。 当我正在学习一本关于 java 的书时,我试图解决一个关于读写器问题的练习,其中 3 位读者应该阅读数字,3 位作者如何打印出从 0 到 4 的数字然后结束。主要课程,作家课程和读者课程(见下文)。 我的书给出的官方解决方案是这样的(“Erzeuger”应该是“writer”,“Verbraucher”应该是“reader”,“Wert”是设置的值): main classvalue classwriter classreader class
但是,如果一开始所有读者都进入 get 方法的等待状态,因为还没有可用的值并且“verfuegbar”标志为假,我会不会遇到死锁。 然后一个写者可以创建一个值,一个读者可以被通知唤醒,然后所有三个写者都可以进入 put 方法的等待状态,然后读者可以读取该值,然后另一个读者可以被唤醒起来,所以他们都落在了等待方法里面,这是一个死锁?
我在这里遗漏了什么,或者这本书的解决方案是错误的? 提前致谢!
【问题讨论】:
-
最好在您的问题中格式化和发布您的代码。 Please do not upload images of code/errors when asking a question.
-
很可能这本书没有错,而您误解了一些事情。阅读与并发、同步和等待/通知相关的数百个其他问题,直到您理解为止(或修改您的问题,使其更适合“我不理解这本书,请给我解释一下”)。
标签: java multithreading concurrency synchronized