【发布时间】:2011-12-28 03:33:57
【问题描述】:
我读过 Java String 类是不可变的和线程安全的,但我仍然对字符串的引用分配是否是线程安全的感到困惑。
第一个问题:如果线程A调用Foo.setString()而线程B调用Foo.getString(),下面的代码是线程安全的吗?
Class Foo {
String aString;
public String getString() {
return aString;
}
public void setString(s) {
aString = s;
}
}
第二个问题:如果上面的代码不是线程安全的,使用了ReentrantLock,我该如何写Foo.getString()方法?
Class Foo {
String aString;
ReentrantLock aLock;
public String getString() {
aLock.lock();
return aString;
aLock.unlock(); // This line will be unreachable. How to fix??
}
public void setString(s) {
aLock.lock();
aString = s;
aLock.unlock();
}
}
我必须使用 ReentrantLock,因为我需要使用 tryLock(timeout) 功能。
【问题讨论】:
-
如果我的两个问题都得到了回答,将接受答案。谢谢。
标签: java string thread-safety immutability reentrantlock