开发者社区> 问答> 正文

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

展开
收起
蛮大人123 2016-03-12 11:20:57 1811 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    不行,同步使用的是锁机制,实例方法头部加关键字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();
    2019-07-17 19:00:31
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载