/*
* 死锁
*/
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