死锁产生原理

/*
死锁
2013/3/18 星期一 10:22:05
*/

/*
造成死锁的原因
	若程序中存在一组线程(两个或多个),
	他们中的每个线程都占用了某种资源而又在等待该组线程中另一个线程所占用的资源,
	这种等待永远不能结束,则出现了死锁.
*/
public class DeadLock{
	public static void main(String[] args){
		TestLock tl = new TestLock();
		//创建两个线程
		Thread one = new Thread(tl);
		Thread two = new Thread(tl);
		//启动两个线程
		one.start();
		two.start();
	}
}

class TestLock implements Runnable{
	public void run(){
		TestRun tr = new TestRun();
		tr.read();
		tr.write();	
	}
}

class TestRun {
	String s1 = "I'm s1";
	String s2 = "I'm s2";

	//锁定s2,请求s1
	public void read(){
		synchronized(s2){
			System.out.println(Thread.currentThread().getName()+" " + s2);
			try{
				Thread.sleep(1000);
			}catch(InterruptedException e){
				e.printStackTrace();
			}
			synchronized(s1){
				System.out.println(Thread.currentThread().getName()+" " + s1);
			}
		}
	}
	
	//锁定s1,请求s2
	public void write(){
		synchronized(s1){
			System.out.println(Thread.currentThread().getName()+ " " + s1);
			try{
				Thread.sleep(1000);
			}catch(InterruptedException e){
				e.printStackTrace();
			}
			synchronized(s2){
				System.out.println(Thread.currentThread().getName()+ " " + s2);
			}
		}
	}	
}

你可能感兴趣的:(java)