我讀過Java的Java類是不可變的,也是線程安全的,但我仍然對字符串的引用賦值是否是線程安全感到困惑。如何安全地在Java中設置/獲取字符串?
第一個問題:如果在線程B調用Foo.getString()
,在下面的代碼是線程安全的線程A調用Foo.setString()
?
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(超時)功能。
如果我的問題都回答了,我會接受答案。謝謝。 – Lee