什么是死锁,如何在Java中进行分析并避免死锁?
Java中的死锁
当两个线程永远等待对方意味着(即没有机会进入就绪队列)时,这种无限等待类型称为死锁。
当等待进程仍保留第一个需要完成的另一个资源时,就会发生死锁。
通过使用synced关键字,我们可能会陷入僵局。不建议将Synchronize关键字不必要地应用。
我们无法解决僵局,但可以基于几种技术来避免出现僵局。
我们如何分析僵局情况?
如果所有线程只有一个对象,那么我们可以使用一个称为“等待图形”的图形。
如果一个线程有多个对象作为一个周期,那么等待图形将无法正常工作,那么我们应该在操作系统中寻求类似banker算法的解决方案来检测死锁。
在给定的示例中,下面我们将看到死锁的情况:
示例
class HelloClass{
public synchronized void first(HiClass hi)
{
try{
Thread.sleep(1000);
}
catch(InterruptedException ie){}
System.out.println(" HelloClass is calling HiClass second() method");
hi.second();
}
public synchronized void second(){
System.out.println("I am inside second method of HelloClass");
}
}
class HiClass{
public synchronized void first(HelloClass he)
{
try{
Thread.sleep(1000);
}
catch(InterruptedException ie){}
System.out.println(" HiClass is calling HelloClass second() method");
he.second();
}
public synchronized void second(){
System.out.println("I am inside second method of HiClass");
}
}
class DeadlockClass extends Thread{
HelloClass he = new HelloClass();
HiClass hi = new HiClass();
public void demo(){
this.start();
he.first(hi);
}
public void run(){
hi.first(he);
}
public static void main(String[] args){
DeadlockClass dc = new DeadlockClass();
dc.demo();
}
}输出结果
D:\Java Articles>java DeadlockClass HelloClass is calling HiClass second() method HiClass is calling HelloClass second() method
热门推荐
10 对患者生日祝福语简短
11 结婚祝福语简短装备
12 周岁祝福语学生文案简短
13 订婚领证祝福语简短精辟
14 导师获奖祝福语大全简短
15 新婚购房祝福语简短精辟
16 牛年祝福语简短的爱人
17 送芒果的祝福语简短
18 送给学长毕业祝福语简短