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

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

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

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

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