javaSE 死锁,多线程同步嵌套


Demo.java:

package cn.xxx.demo;

public class Demo {
	public static void main(String[] args) {
		DeadLock dead = new DeadLock();
		Thread t0 = new Thread(dead);  // 创建线程
		Thread t1 = new Thread(dead);
		t0.start();  // 开启线程
		t1.start();
	}
}
DeadLock.java(线程类,实现Runnable接口,重写run方法):
package cn.xxx.demo;

public class DeadLock implements Runnable{  // 实现Runnable接口
	private int i = 0;
	public void run(){  // 重写run方法
		while(true){
			if(i%2==0){
				//先进入A同步,再进入B同步
				synchronized(LockA.locka){  // 同步
					System.out.println("我拿到了资源A,还需要资源B");
					synchronized(LockB.lockb){  // 同步嵌套
						System.out.println("我也拿到了资源B,可以开始执行任务了");
					}
				}
			}else{
				//先进入B同步,再进入A同步
				synchronized(LockB.lockb){  // 同步
					System.out.println("我拿到了资源B,还需要资源A");
					synchronized(LockA.locka){  // 同步嵌套
						System.out.println("我也拿到了资源A,可以开始执行任务了");
					}
				}
			}
			i++;
		}
	}
}
LockA.java(对象锁A):
package cn.xxx.demo;

public class LockA {
	private LockA(){}
	
	public  static final LockA locka = new LockA();
}
LockB.java(对象锁B):
package cn.xxx.demo;

public class LockB {
	private LockB(){}
	
	public static final LockB lockb = new LockB();
}


猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/80737320
今日推荐