public class DeadLockTest {
public DeadLockTest(){
new ThreadA().start();
new ThreadB().start();
}
public static void main(String[] args) {
new DeadLockTest();
}
Object bjA = new Object();
Object bjB = new Object();
class ThreadA extends Thread{
public void run() {
//得到objA的锁
synchronized(objA){
//等待其他线程, 确保objB的锁已被ThreadB占有.
try {
Thread.sleep(100);
} catch (InterruptedException e) { }
//尝试得到objB的锁, 此时objB的锁已经被ThreadB占有.
synchronized(objB){
}
}
}
}
class ThreadB extends Thread{
public void run() {
//得到objB的锁
synchronized(objB){
//等待其他线程启动
try {
Thread.sleep(100);
} catch (InterruptedException e) { }
//尝试得到objA的锁, 此时objA的锁已经被ThreadA占有.
synchronized(objA){
}
}
}
}
}
运行这个例子后, 会发现程序会一直等待下去.
打开命令行, 运行jconsole, 选择本地刚才启动的进程, 然后进入线程Tab页,可以查看到当前运行的所有线程, 点击"检测到死锁"可以查看到发生死锁的线程.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10742815/viewspace-578356/,如需转载,请注明出处,否则将追究法律责任。