为了账号安全,请及时绑定邮箱和手机立即绑定

java基础内置锁的问题

java基础内置锁的问题

长风秋雁 2019-03-14 18:15:27
比如有个类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
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-04-17
?
噜噜哒

TA贡献1784条经验 获得超7个赞

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


查看完整回答
反对 回复 2019-04-17
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

你想线程安全,是不可能达到你想要的效果的,但是读写锁分离锁可以达到多个线程可以同时进入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-04-17
  • 3 回答
  • 0 关注
  • 503 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号