黑马程序员----关于死锁的问题

------- android培训java培训、期待与您交流! ---------

两个线程在运行的时候都在等待着对方的锁,这样便造成了程序的停滞。造成程序的假死现象。这种现象称为死锁。

实际的开发中不太可能出现,但是面试的时候有很大的概率会被问到死锁的问题。代码如下。

<span style="font-size:14px;">package cn.itcast.thread;
/*
 * 死锁的案例
 */

class Dead implements Runnable{
	private boolean flag;
	Dead(boolean flag){this.flag = flag;}
	public void run(){
		while(true){
			//如果flag = true线程进入A同步代码块,进B同步代码块
			if(flag){
				synchronized(LockA.locka){
					System.out.println("if..locka");
					//进B同步代码块
					synchronized(LockB.lockb){
						System.out.println("if..lockb");
					}
				}
			}else{
				//如果flag = false 线程进入B同步代码块,进入A同步代码块
				synchronized(LockB.lockb){
					System.out.println("else..lockb");
					//进A同步代码块
					synchronized(LockA.locka){
						System.out.println("else..locka");
					}
				}
			}
		}
	}
}

public class ThreadDemo5 {
	public static void main(String[] args) {
		Dead d1 = new Dead(true);//线程进入A代码块
		Dead d2 = new Dead(false);//线程进入B代码块
		Thread t1 = new Thread(d1);
		Thread t2 = new Thread(d2);
		t1.start();
		t2.start();
	}
}
//定义两个锁,A锁,B锁,唯一对象
class LockA{
	public static final LockA locka = new LockA();
}
class LockB{
	public static final LockB lockb = new LockB();
}</span>


 

 

------- android培训java培训、期待与您交流! ---------

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值