JAVA中如何去避免多线程产生的死锁?

侯上校 2011-11-09 02:18:11
JAVA中如何去避免多线程产生的死锁?
...全文
1287 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
nmyangym 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 edric_net_hou2008 的回复:]
多线程的同步实现方法只有加synchronized关键字,还有其它的方法没有?
[/Quote]
还有呢. Lock 类的lock.
kouyiSC 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 edric_net_hou2008 的回复:]
多线程的同步实现方法只有加synchronized关键字,还有其它的方法没有?
[/Quote]

没有了吧。。。
只知道
同步方式有:同步方法和同步块
妖殿 2011-11-09
  • 打赏
  • 举报
回复
其实,这个问题是比较复杂的。死锁有四个必备条件,为了破坏死锁,每个条件都有破坏的方法。
楼上说的按顺序获取资源,是破坏循环等待的条件,算是比较好的方法但是也是有缺点的。第一,是限制的进程对资源的要求,而已给系统中所有的资源合理编号也是件难事,同时增加了系统开销。第二,为了遵循按编号申请的次序,暂不使用的资源也需要提前申请,从而增加了进程对资源的占用时间。
对于这个问题,单一的临界资源可以使用资源分配图算法,多类的临界资源可以使用“银行家算法”。如果想了解一下的话,楼主可以上网查一下。
大_爱 2011-11-09
  • 打赏
  • 举报
回复
买本书看看咯
这个东西不是一下就能明白的!
wuhoujiansky 2011-11-09
  • 打赏
  • 举报
回复
其实我们在操作资源的时候,可以使用到队列。让线程按照顺序操作资源,这样的话,就不会造成死锁现象。
孟祥月 2011-11-09
  • 打赏
  • 举报
回复
1楼说的挺好 操作系统中讲到这个
在Java中使用楼上说的关键字就可了
侯上校 2011-11-09
  • 打赏
  • 举报
回复
多线程的同步实现方法只有加synchronized关键字,还有其它的方法没有?
shaosijun2004 2011-11-09
  • 打赏
  • 举报
回复
比较简单的方法:所有线程都按顺序获取资源,比如资源ABCD ,那所有线程必须获取了A资源再去 申请B资源 , 类推
licip 2011-11-09
  • 打赏
  • 举报
回复
1楼说的很好。
anhy 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luochengor 的回复:]
一般造成死锁必须同时满足如下4个条件:
  1,互斥条件:线程使用的资源必须至少有一个是不能共享的;
  2,请求与保持条件:至少有一个线程必须持有一个资源并且正在等待获取一个当前被其它线程持有的资源;
  3,非剥夺条件:分配资源不能从相应的线程中被强制剥夺;
  4,循环等待条件:第一个线程等待其它线程,后者又在等待第一个线程。
因为要产生死锁,这4个条件必须同时满足,所以要防止死锁……
[/Quote]
+1
luochengor 2011-11-09
  • 打赏
  • 举报
回复
一般造成死锁必须同时满足如下4个条件:
  1,互斥条件:线程使用的资源必须至少有一个是不能共享的;
  2,请求与保持条件:至少有一个线程必须持有一个资源并且正在等待获取一个当前被其它线程持有的资源;
  3,非剥夺条件:分配资源不能从相应的线程中被强制剥夺;
  4,循环等待条件:第一个线程等待其它线程,后者又在等待第一个线程。
因为要产生死锁,这4个条件必须同时满足,所以要防止死锁的话,只需要破坏其中一个条件即可。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧