java – 显式锁是否自动提供内存可见性?
发布时间:2020-08-04 13:12:15 所属栏目:Java 来源:互联网
导读:示例代码: class Sample{ private int v; public void setV(){ Lock a=new Lock(); a.lock(); try{ v=1; }finally{ a.unlock(); } }
|
示例代码: class Sample{
private int v;
public void setV(){
Lock a=new Lock();
a.lock();
try{
v=1;
}finally{
a.unlock();
}
}
public int getV(){
return v;
}
}
如果我有一个线程不断调用getV,我只是在另一个线程中执行setV一次,那读取线程是否保证在写入后立即看到新值?还是需要使“V”变化或AtomicReference? 如果答案是否定的,那么我应该把它改成: class Sample{
private int v;
private Lock a=new Lock();
public void setV(){
a.lock();
try{
v=1;
}finally{
a.unlock();
}
}
public int getV(){
a.lock();
try{
int r=v;
}finally{
a.unlock();
}
return r;
}
}
解决方法从 documentation:
如果您在两个线程中使用Lock(即读取和写入),读取线程将看到新值,因为monitorEnter会刷新缓存.否则,您需要声明变量volatile以强制在读取线程中从内存读取. (编辑:日照站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- mybatis执行批量更新batch update 的方法(oracle,mysql两种
- Java:强制双向链接的对象
- ”””是一个很好的方法来转换一个整数到字符串在Java中?
- java – 有什么问题:LinkedList stringList = new LinkedL
- 将Java对象序列化为Java代码?
- 详解SpringMVC使用MultipartFile实现文件的上传
- java – Spring @ContextConfiguration
- java – maven-tomcat7-plugin生成损坏的可执行JAR
- SpringMvc+Mybatis+Pagehelper分页详解
- java – 套接字:BufferedReader readLine()块
