多线程,锁

时间:2014-05-09 09:42:33

标签: java multithreading locks

让我们考虑一个具有多个锁的系统。让我们说过程A想获得一个锁。 传统方法是争夺锁定并最终得到它。而不是这个,我们能做到吗? 有些不同?我们可以将需要执行的任务提供给当前的线程吗? 有锁吗?在这种情况下,不需要获取锁。我们如何实现这一目标并确保 这种方法快速,高效,公平。让我们假设一个任务由一个类表示, 有一个方法,运行。然后我们可以传递一个类的实例。现在让我们描绘一个 可能发生的情况。 Thread A有锁,而thread B想要获取它。 Thread B给出了它 任务到thread A。到那时thread A已解锁并离开。 Thread B将永远等待。我们需要 处理这种特殊情况

1 个答案:

答案 0 :(得分:0)

线程通信可以通过几种不同的方式实现,例如Queue,Ring Buffer等。通常,争用锁定代表了在共享资源上进行协作的默认方式,但它不能作为方法扩展。

建议的共享任务的方法可以通过通信的方式来考虑协作。在这种情况下,线程A从线程B接收任务,让我们在队列X上说,一旦完成,线程A在队列Y上响应线程B.就像这样,没有锁定要获取,假设队列已经是同步的或线程安全的(例如,自Java 1.5以来的并发版本)。

总结一下,需要区分这两种情况:通过1.锁定或2.通信(即根据您的示例进行任务交换)的合作。这是面对这类问题的基本方法。无论如何,如果您在定义场景时更精确,那么我们可能更容易帮助您设计并发解决方案/算法。