两个线程分别拿到各自需要的锁不放
增加Thread.sleep增加死锁概率,线程一运行拿s1锁,线程二运行拿s2锁,给上sleep阻塞,当两者继续运行时需要对方线程的锁,都拿着不放,造成了死锁。
public class deadlock {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer();
StringBuffer s2 = new StringBuffer();
new Thread(new Runnable(){
@Override
public void run() {
synchronized (s1)
{
s1.append("QW");
s2.append("12");
// try {
// Thread.sleep(100);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
synchronized (s2)
{
s1.append("ER");
s2.append("34");
System.out.println(s1);
System.out.println(s2);
}
}
}
}).start();
new Thread(){
@Override
public void run() {
synchronized (s2)
{
s1.append("TY");
s2.append("56");
// try {
// Thread.sleep(100);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
synchronized (s1)
{
s1.append("UI");
s2.append("78");
System.out.println(s1);
System.out.println(s2);
}
}
}
}.start();
}
}