比如有个类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
不行,同步使用的是锁机制,实例方法头部加关键字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();
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。