什么是死锁,如何在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 对长辈贺卡祝福语简短