2 qq 23473123 qq_23473123 于 2017.09.19 16:09 提问

synchronized能控制同一时刻的请求,只要有get就不能set,只要有set就不能get?

图片说明
get和set单独加synchronized修饰怎么就能控制同一时刻的请求,只要有get就不能set,只要有set就不能get?当一个线程在使用set方法时,怎么就把get方法给锁了,不是只锁了set?

3个回答

dulin19870504
dulin19870504   2017.09.19 16:13

再抽一个方法 get和set都调 不就可以了

qq_23473123
qq_23473123 谢谢,不过:一个是修改一个是获取值,需求不同
2 个月之前 回复
dulin19870504
dulin19870504   2017.09.19 16:15

或者
public int get(){synchronized(this) {return value;}}
public void set(int value){synchronized(this) {this.value = value;}}

qq_23473123
qq_23473123 这个的意思是对象只能掉用get或者set其中一种方法对吧,我刚刚又在想其实可以同时几个请求get,这样加了岂不是不能同时get
2 个月之前 回复
qq_32747453
qq_32747453   2017.09.19 17:38

我刚好也在看这本书,它的意思时synchronized同步会实现两个功能。
一个是避免多个线程同时访问共享变量造成的竞态条件
一个是保证线程进入同步块的时候获取的共享变量的值与上一个离开同步块的线程看到的或者设置的共享变量的值是一致的。也就是当某个线程修改了共享变量之后,其他线程可以立即看到。即可见性。

qq_32747453
qq_32747453 回复qq_23473123: 应该是这样吧
2 个月之前 回复
qq_23473123
qq_23473123 谢谢,我知道它的意思,不过我问的不是synchronized的功能?而是问使用它的两个方法的协调?然后我现在在想其实可以同时几个请求get,这样加了岂不是不能同时get?
2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片