死锁实例:
思路是创建两个字符串strA和strB,再创建两个线程t1和t2,让每个线程都用synchronized锁住字符串(t1先锁strA,再去锁strB;t2先锁strB,再锁strA),如果t1锁住strA,t2锁住strB,t1就没办法锁住strB,t2也没办法锁住strA,这时就陷入了死锁
package com.ecc.echain.util;
class ThreadA implements Runnable{
public void run(){
try{
System.out.println("进入TreadA线程");
while(true){
synchronized(test.strA){
System.out.println("锁定TreadA线程");
Thread.sleep(2000);
synchronized(test.strB){
System.out.println("锁定TreadB线程");
Thread.sleep(2000);
}
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
class ThreadB implements Runnable{
public void run(){
try{
System.out.println("进入TreadB线程");
while(true){
synchronized(test.strB){
System.out.println("锁定TreadB线程");
Thread.sleep(2000);
synchronized(test.strA){
System.out.println("锁定TreadA线程");
Thread.sleep(2000);
}
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
public class test
{
public static String strA = "strA";
public static String strB = "strB";
public static void main(String [] args)
{
Thread t1 = new Thread(new ThreadA());
Thread t2 = new Thread(new ThreadB());
t1.start();
t2.start();
}
}
执行结果