您的位置:首页 > 职场人生

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

2014-08-20 15:56 162 查看
-------
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培训、期待与您交流! ---------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: