让我们考虑一个具有多个锁的系统。让我们说过程A想获得一个锁。
传统方法是争夺锁定并最终得到它。而不是这个,我们能做到吗?
有些不同?我们可以将需要执行的任务提供给当前的线程吗?
有锁吗?在这种情况下,不需要获取锁。我们如何实现这一目标并确保
这种方法快速,高效,公平。让我们假设一个任务由一个类表示,
有一个方法,运行。然后我们可以传递一个类的实例。现在让我们描绘一个
可能发生的情况。 Thread A
有锁,而thread B
想要获取它。 Thread B
给出了它
任务到thread A
。到那时thread A
已解锁并离开。 Thread B
将永远等待。我们需要
处理这种特殊情况
答案 0 :(得分:0)
线程通信可以通过几种不同的方式实现,例如Queue,Ring Buffer等。通常,争用锁定代表了在共享资源上进行协作的默认方式,但它不能作为方法扩展。
建议的共享任务的方法可以通过通信的方式来考虑协作。在这种情况下,线程A从线程B接收任务,让我们在队列X上说,一旦完成,线程A在队列Y上响应线程B.就像这样,没有锁定要获取,假设队列已经是同步的或线程安全的(例如,自Java 1.5以来的并发版本)。
总结一下,需要区分这两种情况:通过1.锁定或2.通信(即根据您的示例进行任务交换)的合作。这是面对这类问题的基本方法。无论如何,如果您在定义场景时更精确,那么我们可能更容易帮助您设计并发解决方案/算法。