ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 一个死锁的例子.

一个死锁的例子.

原创 Linux操作系统 作者:21ca 时间:2009-03-25 13:24:18 0 删除 编辑

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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: JPA标注
请登录后发表评论 登录
全部评论

注册时间:2009-03-24

  • 博文量
    58
  • 访问量
    83396