Java 多线程 死锁
线程死锁代码的实现
public class LockA { //不同的线程争抢同一个锁,只有一个锁对象 ===> 被争抢的锁对象 应该具有唯一性! //私有的构造器, 在此类外部无法任何类都无法new该类的对象 private LockA(){} //外类不能new 本类内部自己new //LockA locka = new LockA(); //当前 该对象目前为 非静态 //new出的对象 还需要能被外类使用 非静态 只能通过new对象 对象. 的方式来调用 //只用添加static修饰 改用 类名. 方式来调用 //防止被改 再添加 final修饰 public static final LockA locka = new LockA(); }
public class LockB { private LockB(){} public static final LockB lockb = new LockB(); }
public class DeadLock implements Runnable{ private int i = 0; public void run(){ while(true){ //利用奇数偶数 让两个线程执行不同 一个先拿A锁 再拿B锁 一个先拿B锁 再拿A锁 if(i%2==0){ //先进入A同步,再进入B同步 synchronized(LockA.locka){ System.out.println("if...locka"); synchronized(LockB.lockb){ System.out.println("if...lockb"); } } }else{ //先进入B同步,再进入A同步 synchronized(LockB.lockb){ System.out.println("else...lockb"); synchronized(LockA.locka){ System.out.println("else...locka"); } } } i++; } } }
public class DeadLockDemo { public static void main(String[] args) { DeadLock dead = new DeadLock(); Thread t0 = new Thread(dead); Thread t1 = new Thread(dead); t0.start(); t1.start(); } }

浙公网安备 33010602011771号