java基础内置锁的问题

比如有个类A,


class A{

    private int a;

    public synchronized int get()

    {

        return this.a;

        }

        

    public synchronized void set(int a)

    {

        this.a = a;

    }

}

我想问,假如这个类的对象被多个线程共享,比如t1,t2,那么t1进入set方法的时候,t2能否进入get方法?我只知道不能同时进入get 或 set


长风秋雁
浏览 504回答 3
3回答

慕婉清6462132

不可以。对于同步的实例方法,是使用的对象的内置锁(管程),所以两个方法使用的锁是同一个。

噜噜哒

不行,同步使用的是锁机制,实例方法头部加关键字synchronized默认其锁是this对象,所以当一个对象执行get时,另一个线程对这个对象(同前一个线程中的对象)也不能执行set。

斯蒂芬大帝

你想线程安全,是不可能达到你想要的效果的,但是读写锁分离锁可以达到多个线程可以同时进入get方法,读写锁在java中的代码如下:   private static final ReentrantReadWriteLock   reentrantLock = new ReentrantReadWriteLock(true);    private static final ReadLock                 readLock      = reentrantLock.readLock();    private static final WriteLock                writeLock     = reentrantLock.writeLock();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java