面试问题,如何在java中防止n个线程n资源死锁

时间:2010-12-15 15:26:48

标签: multithreading

在一次采访中询问了这个问题,并且正在评判在高层次上解决这个问题的架构方法。在Java中,如何解决这个问题 - > N个线程.. n资源..你使用什么协议来确保没有发生死锁?

那么,有人能告诉我最优化的方法吗?使所有方法同步 可以使系统陷入僵局,那么如何解决这个问题?

3 个答案:

答案 0 :(得分:6)

他们可能正在寻找lock ordering。也就是说,如果您使用多个锁和多个线程,则必须确保始终以相同的顺序获取锁。否则僵局只是时间问题。

答案 1 :(得分:1)

如果没有任何问题没有共享,N线程可以访问N资源,当不同线程之间存在资源共享时,挑战就来了。

让我们以打印机,扫描仪,烤箱,咖啡机为例在我们的办公室中,我们将它们视为资源和员工作为线程,如果2资源说员工约翰和克里斯滕来咖啡他们站在队列中会发生什么咖啡机的并行处理,与打印机员工相同Venkat同时提交打印作业,Jame也提交打印作业,然后转到作业队列。

因此,您必须将阻塞队列和资源实现为消费者。

如果您使用信号量,您可以控制没有线程进入您的关键部分。

答案 2 :(得分:0)

你能提供更多细节吗?

让一个受“同步”保护的计数器可能就是所需要的。