Synchronized method 锁的是this么?


  • Global Moderator

    Q: Synchronized method 锁的是this么?

    A: syncrhonized method和syncrhonized(this)的语义相同。有于Java是面向对象语言,方法的访问是对于一个类的实例而言的。所以他们的含义是指只有一个线程能够同时某 个实例的里面加synchronized的方法进行访问。下面的代码说明了这一点。

    public class A { 
        public synchronized void foo() {…};
        public synchronized void bar() {…};
        public void foobar() {…};
    }
    A a1 = new a1();
    T1: a1.foo();
    T2: a1.bar(); // T2 is blocked
    T3: a1.foobar(); T3 is not blocked
    

    这个和下面的代码是一样的:

    public class A { 
        public void foo() {
            synchronized(this) {
                ...
            }
        }; 
        public void bar() {
    	 synchronized(this) {
    	     ...
             }
        };
        public void foobar() {…}
    }
    A a1 = new a1();
    T1: a1.foo();
    T2: a1.bar(); // T2 is blocked
    T3: a1.foobar(); T3 is not blocked
    

登录后回复
 

与 BitTiger Community 的连接断开,我们正在尝试重连,请耐心等待