java基础内置锁的问题
ringa_lee
ringa_lee 2017-04-17 17:36:57
[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

ringa_lee
ringa_lee

ringa_lee

全部回复(3)
大家讲道理

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

高洛峰

不行,同步使用的是锁机制,实例方法头部加关键字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();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号