1
2
您正在使用正确的方法使用公共互斥锁在两个队列之间进行同步。但是,为了避免您描述的第一个队列为空的情况,我建议重新实现
|
2
1
你没有提到的另一个失败条件是,如果firstQ不是空的,但是secondQ是满的,那么这个项目将从firstQ中移除,但是没有地方放置它。
这是一种乐观的方法;在正常操作中是有效的,但在死锁频繁的情况下是非常低效的(平均延迟取决于所选的超时) |
3
0
您应该使用java.util.concurrency中的锁机制,如下所示:
不再需要在对象类上使用低级wait/notify方法,除非您正在编写新的并发原语。 |
4
0
在你的代码中,当线程被阻塞时
在这里我假设
你会有类似的代码
如果你不想
最后,我质疑是否有必要使这一举动具有原子性。如果多个线程正在从队列中添加或删除,则观察队列将无法判断
|
Administrator · c#-等待完成2个线程中的1个 7 年前 |
Magnar Myrtveit · 发送电子邮件的脚本中出现死锁 7 年前 |
BlackBrain · MySQL死锁,带有引发触发器的插入 8 年前 |
Patt · ExecutorService和ForkJoinPool 8 年前 |