package thread;
public class DeadLockTest implements Runnable {
//发生死锁的对象一定是静态的
public static Object o1=new Object (),o2=new Object();
private int flag=1;
public static void main(String[] args) {
// TODO Auto-generated method stub
DeadLockTest dl1=new DeadLockTest();
DeadLockTest dl2=new DeadLockTest();
dl1.setFlag(1);
dl2.setFlag(2);
Thread t1=new Thread(dl1);
Thread t2=new Thread(dl2);
t1.start();
t2.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("falg="+this.flag);
if(this.flag==1){
//o1和o2都是静态的成员,不管实例化多少个对象,一个静态的成员都只有一个
synchronized(o1){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(o2){
System.out.println("1");
}
}
}
if(this.flag==2){
synchronized(o2){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (o1) {
System.out.println("2");
}
}
}
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
}
public class DeadLockTest implements Runnable {
//发生死锁的对象一定是静态的
public static Object o1=new Object (),o2=new Object();
private int flag=1;
public static void main(String[] args) {
// TODO Auto-generated method stub
DeadLockTest dl1=new DeadLockTest();
DeadLockTest dl2=new DeadLockTest();
dl1.setFlag(1);
dl2.setFlag(2);
Thread t1=new Thread(dl1);
Thread t2=new Thread(dl2);
t1.start();
t2.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("falg="+this.flag);
if(this.flag==1){
//o1和o2都是静态的成员,不管实例化多少个对象,一个静态的成员都只有一个
synchronized(o1){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(o2){
System.out.println("1");
}
}
}
if(this.flag==2){
synchronized(o2){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (o1) {
System.out.println("2");
}
}
}
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
}