线程交互场景

时间:2014-06-23 06:45:52

标签: java multithreading synchronization

enter image description here

您好,

我是多线程的新手,想了解线程交互在下面的场景(PFA图)中的工作原理。方法1在对象1上同步,方法2在对象2上同步,方法3在对象1和2上同步。

由于

1 个答案:

答案 0 :(得分:0)

在Java中,如果你有同步方法,它们只在一个对象上同步;这是对象实例this,如果它是实例方法,或者Class对象,如果它是静态方法。

从技术上讲,您所说的可以使用经典同步实现:

public static MyClass {
    private final FIRST_LOCK = new Object();
    private final SECOND_LOCK = new Object();

    public void m1() {
        synchronized(FIRST_LOCK) {
        } 
    }

    public void m2() {
        synchronized(SECOND_LOCK) {    
        } 
    }

    public void m3() {
        synchronized(FIRST_LOCK) {
            synchronized(SECOND_LOCK) {
            }
        } 
    }
}

这意味着如果某个线程执行方法m1m2,那么其他线程就无法执行m3而反之亦然 - 如果某些线程执行{{1那么没有其他线程可以执行m3m1