【Java开源代码栏目提醒】:以下是网学会员为您推荐的Java开源代码-AvoidDeadLockDemo.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();
}
}
上一篇:
AvgProjection.java
下一篇:
首鼠两端