【发布时间】:2014-06-21 02:39:49
【问题描述】:
我正在尝试使用 Java 中的信号量来实现监视器,以创建一个带有一些写入线程和一些读取线程的有界缓冲区。
到目前为止,我做了以下工作:
对于我们可能想要锁定的每个类(即之前,我们会在其中有一个同步代码块),我添加了两个信号量,一个二进制信号量在块的开头锁定并在结尾解锁(确保在任何时候只能执行一个关键代码部分),另一个充当传递 notify 和 notifyAll 信号的单元。我还创建了一个整数计数器来跟踪调用了等待的线程。
然后在同步代码块的开头,我获得了“监视器”的锁,然后在必要时调用我的替换等待指令。
我有两个线程不断调用 put 和两个线程不断调用 get。在 1 秒到 10 秒之间的任何时间后,所有线程都会卡住。
不知何故,他们都被卡住了,我真的不知道怎么回事!我花了几天时间思考这个问题。有什么想法吗?
有没有人知道是什么导致所有这些线程卡在这一点上?
谢谢,
【问题讨论】:
-
我不知道这是否相关,但是,它让我想到了这个:Dining philosophers problem
-
blocksWaitingCount在我看来应该是 volatile 或AtomicInteger:否则无法保证其他线程会看到更新的值。
标签: java multithreading concurrency semaphore monitor