package deadLockThread;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Test {
private int size = 0;
private Lock lock = new ReentrantLock();
public void doSome() {
System.out.println(Thread.currentThread().getName() + "获取size");
size++;
}
public void doTest(Test test) {
while (true) {
boolean myLock = this.lock.tryLock();// 尝试取得当前对象的Lock锁定
boolean testLock = test.lock.tryLock();// 尝试取得被传入得对象的Lock锁定
try {
if (myLock && testLock) { //当两个对象的Lock 都获取到后再进行 操作
test.doSome();
break;
}
} finally {
if (myLock) {
this.lock.unlock();
}
if (testLock) {
test.lock.unlock();
}
}
}
}
}
package deadLockThread;
public class DeadLock {
public static void main(String[] args) {
final Test t1 = new Test();
final Test t2 = new Test();
Thread th1 = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
t1.doTest(t2);
}
});
Thread th2 = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
t2.doTest(t1);
}
});
th1.start();
th2.start();
}
}