发新话题
打印

java线程死锁

java线程死锁

package test;

class A {
    synchronized void foo(B b) {
        String name = Thread.currentThread().getName();
        System.out.println(name + " enter A.foo");

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(name + " trying to call B.last");
        b.last();
    }

    synchronized void last() {
        System.out.println(Thread.currentThread().getName() + "inside A.last");
    }
}


class B {
    synchronized void bar(A a) {
        String name = Thread.currentThread().getName();
        System.out.println(name + " enter B.bar");

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(name + " trying to call A.last");
        a.last();
    }

    synchronized void last() {
        System.out.println(Thread.currentThread().getName() + " inside B.last");
    }
}


public class Test implements Runnable {
    A a = new A();
    B b = new B();

    Test() {
        Thread.currentThread().setName("MainThread");
        new Thread(this).start();
        System.out.println("track after start");
        a.foo(b);
        System.out.println("back in main thread");
    }

    public void run() {
        System.out.println("track in run");
        Thread.currentThread().setName("RacingThread");
        b.bar(a);
        System.out.println("back in other thread");
    }

    public static void main(String[] args) {
        new Test();
    }
}

TOP

发新话题