zoukankan      html  css  js  c++  java
  • java死锁问题

    package selenium_demo;
    
    class A {
        synchronized void foo(B b) {
            String name = Thread.currentThread().getName();
            System.out.println(name + " entered A.foo");
            try {
                Thread.sleep(100);
            } catch (Exception e) {
                System.out.println("A Interrupted");
            }
            System.out.println(name + " trying to call B.last()");
            b.last();
        }
    
        synchronized void last() {
            System.out.println("Inside A.last");
        }
    }
    
    class B {
        synchronized void bar(A a) {
            String name = Thread.currentThread().getName();
            System.out.println(name + " entered B.bar");
            try {
                Thread.sleep(100);
            } catch (Exception e) {
                System.out.println("B Interrupted");
            }
            System.out.println(name + " trying to call A.last()");
            a.last();
        }
    
        synchronized void last() {
            System.out.println("Inside B.last");
        }
    }
    
    class Deadlock implements Runnable {
        A a = new A();
        B b = new B();
    
        Deadlock() {
            Thread.currentThread().setName("MainThread");
            Thread t = new Thread(this, "RacingThread");
            t.start();
            a.foo(b); // get lock on a in this thread.
            System.out.println("Back in main thread");
        }
    
        public void run() {
            b.bar(a); // get lock on b in other thread.
            System.out.println("Back in other thread");
        }
    
        public static void main(String args[]) {
            new Deadlock();
        }
    }

    最后输出:

    MainThread entered A.foo
    RacingThread entered B.bar
    MainThread trying to call B.last()
    RacingThread trying to call A.last()
    

      为什么会死锁?  a.foo(b)    b.bar(a)   ,互相调用对方last,都没用着,怎么会锁呢?

    锁的是对象,not单个什么玩意

  • 相关阅读:
    java网络爬虫爬虫小栗子
    浮点数精确表示
    使用yum安装CDH Hadoop集群
    判断奇数,java陷阱
    Long型整数,缄默溢出
    java基础知识点
    java常用指令
    Codeforces Round #275 (Div. 2) D
    区间dp的感悟
    Codeforces Round #386 (Div. 2) C D E G
  • 原文地址:https://www.cnblogs.com/qbmiller/p/3666383.html
Copyright © 2011-2022 走看看