两道企业面试题(1)-死锁的应用

/*
 *  死锁
 */

public class DeadLock02Thread implements Runnable{
	int b=100;
	
	//m1被锁定,但不能改变同样被锁住的m2
	public synchronized void m1() throws Exception{
		b=1000;
		Thread.sleep(5000);
		System.out.println("b="+b);
	}
	
	//m1被锁定,但线程可以访问未被锁定的m2
	//把m2页锁定
	//两个方法改同一个值,为了避免相互影响,必须加同步
	public synchronized void m2() throws Exception{
		Thread.sleep(2500);
		b=2000;
		//System.out.println(b);
	}
	
	public void run() {
		try{
			m1();
		}catch  (Exception e){
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws Exception{
		DeadLock02Thread tt=new DeadLock02Thread();
		Thread T=new Thread(tt);
		T.start();
		
		tt.m2();
		
		//b先被m2拿到,改成2000,再被m1拿到,改成1000,然后打印出来
		System.out.println(tt.b);
	}
}

运行结果:

1000
b=1000


猜你喜欢

转载自blog.csdn.net/hpuxiaofang/article/details/53241696