什么是死锁,如何在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 好听的元旦简短祝福语