⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 avoiddeadlockdemo.java

📁 JAVA编程思想源代码 值得一下 很难找的
💻 JAVA
字号:
package chapter13;

public class AvoidDeadLockDemo implements Runnable {

	boolean aLock = true; //用于判断A类资源的同步锁是否释放

	boolean bLock = true; //用于判断B类资源的同步锁是否释放

	class A {
		synchronized void a(B b) throws InterruptedException {
			bLock = false; //开始使用B类资源的时候则标志A类资源加锁
			System.out.println(Thread.currentThread().getName() + "进入到A类中的方法");
			Thread.sleep(1000);
			b.dead();
			bLock = true; //使用完毕后就释放锁
		}

		synchronized void dead() {
			System.out.println("dead");
		}
	}

	class B {

		synchronized void b(A a) throws InterruptedException {
			aLock = false; //开始使用A类资源的时候则标志A类资源加锁
			System.out.println(Thread.currentThread().getName() + "进入到B类中的方法");
			Thread.sleep(1000);
			a.dead();
			aLock = true; //使用完毕后就释放锁
		}

		synchronized void dead() {
			System.out.println("dead");
		}
	}

	public A a = new A();

	public B b = new B();

	public AvoidDeadLockDemo() throws InterruptedException {
		Thread.currentThread().setName("主线程");
		Thread t = new Thread(this, "其他线程");
		t.start();
		if (aLock == true) { //判断A类的同步锁是否已经释放
			a.a(b); //如果已释放,则调用A类的方法
		} else {
			while (aLock == false) { //如果没有释放,则循环等待直到释放为止
				t.sleep(1000);
			}
			a.a(b);
		}
		System.out.println("主线程运行完毕!");
	}

	public void run() {

		try {
			if (bLock == true) { //判断B类的同步锁是否已经释放
				b.b(a); //如果已释放,则调用B类的方法
			} else {
				while (bLock == false) { //如果没有释放,则循环等待直到释放为止
					Thread.sleep(1000);
				}
				b.b(a);
			}
		} catch (InterruptedException ie) {
		}
		System.out.print("其他线程运行完毕!");
	}

	public static void main(String[] args) throws InterruptedException {
		new AvoidDeadLockDemo();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -