mre*_*mre 8 java immutability thread-safety
假设我有以下内容,
public class Foo{
private String bar;
public String getBar(){
return bar;
}
public void setBar(String bar){
this.bar = bar;
}
}
Run Code Online (Sandbox Code Playgroud)
由于String类的不可变特性,这些方法是自动线程安全的,还是需要一些锁定机制?
Mat*_*all 19
不,这不是线程安全的.Foo是可变的,所以如果你想确保不同的线程看到相同的值bar- 即一致性 - 或者:
bar volatile,或synchronized,或AtomicReference<String>.读取和写入bar本身就是原子的,但原子性不是线程安全的.
http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html
要深入了解Java并发性,请获取Java Concurrency in Practice(又名JCIP)的副本.
不,不安全.
这是Foo可变行为; 字符串的不变性不会归于Foo.
public class Foo{
private String bar;
public synchronized String getBar(){
return bar;
}
public synchronized void setBar(String bar){
this.bar = bar;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12741 次 |
| 最近记录: |