当前位置: 首页 > 面试题库 >

JAVA中如何确保N个线程可以访问N个资源,但同时又不导致死锁?

胡天佑
2023-03-14
本文向大家介绍JAVA中如何确保N个线程可以访问N个资源,但同时又不导致死锁? 相关面试题,主要包含被问及JAVA中如何确保N个线程可以访问N个资源,但同时又不导致死锁? 时的应答技巧和注意事项,需要的朋友参考一下

考察点:死锁

使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。

预防死锁,预先破坏产生死锁的四个条件。互斥不可能破坏,所以有如下三种方法:

1.破坏请求和保持条件,进程必须等所有要请求的资源都空闲时才能申请资源,这种方法会使资源浪费严重(有些资源可能仅在运行初期或结束时才使用,甚至根本不使用). 允许进程获取初期所需资源后,便开始运行,运行过程中再逐步释放自己占有的资源,比如有一个进程的任务是把数据复制到磁盘中再打印,前期只需获得磁盘资源而不需要获得打印机资源,待复制完毕后再释放掉磁盘资源。这种方法比第一种方法好,会使资源利用率上升。

2.破坏不可抢占条件,这种方法代价大,实现复杂。

3.破坏循坏等待条件,对各进程请求资源的顺序做一个规定,避免相互等待。这种方法对资源的利用率比前两种都高,但是前期要为设备指定序号,新设备加入会有一个问题,其次对用户编程也有限制。

 类似资料:
  • N进程M资源死锁问题 京东2022C++开发岗一道笔试题: n进程,100个文件,每个进程并发处理4个文件,每个文件只能同时由一个进程访问,请问产生死锁最少的进程数n A.31 B.32 C.33 D.34 以前总觉得自己线程进程理解到位了,但是一遇到这道题立马投降了。 考试的时候一直在满脑子100/4=25,然后以100+25=125,且31*4=124,32*4=128为由,选择了32便略过了

  • 问题内容: public class Deadlock { static class Friend { private final String name; public Friend(String name) { this.name = name; } public String getName() { return this.name; } public synchronized void b

  • 问题内容: 我有一个表格,我需要在其中获取每个类别的前n个最高金额的项目。 我期望的输出是前2个类别中的最高清单。 问题答案: 这应该为您工作。如果它不满足您的要求,请发回您需要的内容。您最初希望有25个,所以您只需将最后一个子句修改为 如果要从表中选择更多列,只需将它们添加到和“ GROUP BY”子句中。 仅当您要扩展“ 每个Category,foo,bar的TOP n ”时,才将这些列也添加

  • 问题内容: 我们正在做一个MySQL的小型基准测试,我们希望了解它对数据的性能。 该测试的一部分是查看当多个并发线程对服务器执行各种查询时,服务器如何工作。 在MySQL文档(5.0)是不是多线程的客户真的清楚。我应该指出,我确实针对线程安全库()进行了链接 我正在使用准备好的语句,并且同时执行读取(SELECT)和写入(UPDATE,INSERT,DELETE)操作。 我应该为每个线程打开一个连

  • 我的问题是我无法思考如何编码,因为n<=50和a,b<=16,所以我不确定有多少个不同的数字,如果有16个数字,那么我必须找到16个数字的所有可能的组合,所以指导我通过这个。