gpt4 book ai didi

java - 如何保证T线程可以访问n个资源而不死锁?

转载 作者:行者123 更新时间:2023-11-29 06:39:24 25 4
gpt4 key购买 nike

假设我有线程 t1、t2、t3......t10,我需要访问打印机和扫描仪,顺序是先扫描然后使用这些线程打印,那么我如何确保 t1、t2.. .t10(由多个用户)可以无死锁地访问扫描仪或打印机。

t1 完成扫描并等待打印机的工作,现在 t2 正在执行打印文档的工作。那么我如何确保 t1 不应该中断作业 t2。现在 t2 完成了他的打印工作,同一个用户想要扫描另一个文档,但它没有被 t1 释放。所以 t1 和 t2 之间出现僵局,t1 想要打印机,t2 想要扫描仪,但他们已经拥有其他资源。

最佳答案

t1 finishes his job of scanning and waiting for printer and now t2 is doing job of printing the doc. So how do I ensure that t1 should not interrupt the job t2.

实现这种机制的一个好方法是使用队列,例如线程安全的队列 BlockingQueue并有 2 个消费者线程:

  • 从打印机队列中获取作业的打印机线程
  • 从 scannerQueue 获取作业的扫描器线程

然后您的 T0...T10 只需将作业放入队列之一并等待(或不等待)它们在打印机/扫描仪准备就绪时执行。

通过这样做,您无需锁定客户端/生产者端,并让消费者端(打印机和扫描仪)管理他们的工作。

关于java - 如何保证T线程可以访问n个资源而不死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14395289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com