死锁

本文记录Java学习过程中遇到的死锁~

同步锁使用的弊端:当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。这时容易引发一种现象:程序出现无限等待,这种现象我们称为死锁。

synchronzied(A锁){
	synchronized(B锁){
         
        }
}

示例代码(锁对象类):

public class MyLock {
	public static final Object lockA = new Object();
	public static final Object lockB = new Object();
}

示例代码(线程任务类):

public class ThreadTask implements Runnable {
	int x = new Random().nextInt(1);//0,1
	//指定线程要执行的任务代码
	@Override
	public void run() {
		while(true){
			if (x%2 ==0) {
				//情况一
				synchronized (MyLock.lockA) {
					System.out.println("if-LockA");
					synchronized (MyLock.lockB) {
						System.out.println("if-LockB");
						System.out.println("if大口吃肉");
					}
				}
			} else {
				//情况二
				synchronized (MyLock.lockB) {
					System.out.println("else-LockB");
					synchronized (MyLock.lockA) {
						System.out.println("else-LockA");
						System.out.println("else大口吃肉");
					}
				}
			}
			x++;
		}
	}
}

示例代码(测试类):

//创建线程任务类对象
ThreadTask task = new ThreadTask();
//创建两个线程
Thread t1 = new Thread(task);
Thread t2 = new Thread(task);
//启动线程
t1.start();
t2.start();

标签: none