当前位置:编程学习 > JAVA >>

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

JAVA中如何去避免多线程产生的死锁? --------------------编程问答-------------------- 一般造成死锁必须同时满足如下4个条件:
  1,互斥条件:线程使用的资源必须至少有一个是不能共享的;
  2,请求与保持条件:至少有一个线程必须持有一个资源并且正在等待获取一个当前被其它线程持有的资源;
  3,非剥夺条件:分配资源不能从相应的线程中被强制剥夺;
  4,循环等待条件:第一个线程等待其它线程,后者又在等待第一个线程。
因为要产生死锁,这4个条件必须同时满足,所以要防止死锁的话,只需要破坏其中一个条件即可。 --------------------编程问答--------------------
引用 1 楼 luochengor 的回复:
一般造成死锁必须同时满足如下4个条件:
  1,互斥条件:线程使用的资源必须至少有一个是不能共享的;
  2,请求与保持条件:至少有一个线程必须持有一个资源并且正在等待获取一个当前被其它线程持有的资源;
  3,非剥夺条件:分配资源不能从相应的线程中被强制剥夺;
  4,循环等待条件:第一个线程等待其它线程,后者又在等待第一个线程。
因为要产生死锁,这4个条件必须同时满足,所以要防止死锁……

+1 --------------------编程问答-------------------- 1楼说的很好。 --------------------编程问答-------------------- 比较简单的方法:所有线程都按顺序获取资源,比如资源ABCD ,那所有线程必须获取了A资源再去 申请B资源 , 类推 --------------------编程问答-------------------- 多线程的同步实现方法只有加synchronized关键字,还有其它的方法没有? --------------------编程问答-------------------- 1楼说的挺好 操作系统中讲到这个
在Java中使用楼上说的关键字就可了 --------------------编程问答-------------------- 其实我们在操作资源的时候,可以使用到队列。让线程按照顺序操作资源,这样的话,就不会造成死锁现象。 --------------------编程问答-------------------- 买本书看看咯
这个东西不是一下就能明白的! --------------------编程问答--------------------    其实,这个问题是比较复杂的。死锁有四个必备条件,为了破坏死锁,每个条件都有破坏的方法。
   楼上说的按顺序获取资源,是破坏循环等待的条件,算是比较好的方法但是也是有缺点的。第一,是限制的进程对资源的要求,而已给系统中所有的资源合理编号也是件难事,同时增加了系统开销。第二,为了遵循按编号申请的次序,暂不使用的资源也需要提前申请,从而增加了进程对资源的占用时间。
   对于这个问题,单一的临界资源可以使用资源分配图算法,多类的临界资源可以使用“银行家算法”。如果想了解一下的话,楼主可以上网查一下。   --------------------编程问答--------------------
引用 5 楼 edric_net_hou2008 的回复:
多线程的同步实现方法只有加synchronized关键字,还有其它的方法没有?


没有了吧。。。
只知道 
同步方式有:同步方法和同步块 --------------------编程问答--------------------
引用 5 楼 edric_net_hou2008 的回复:
多线程的同步实现方法只有加synchronized关键字,还有其它的方法没有?

还有呢. Lock 类的lock.
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,