私はJava Stringクラスを読みましたが、不変でスレッドセーフですが、文字列の参照割り当てがスレッドセーフであるかどうかについてはまだ混乱しています。Javaで文字列を安全に設定/取得するには?
最初の質問:スレッドBがFoo.getString()
を呼び出しながら、スレッドAがFoo.setString()
を呼び出す場合、コードスレッドセーフ以下ですか?
Class Foo {
String aString;
public String getString() {
return aString;
}
public void setString(s) {
aString = s;
}
}
2番目の質問:上記のコードはスレッドセーフではない場合、私はFoo.getString()
メソッドを書くのですか、ReentrantLockのを使用していますか?
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();
}
}
私はtryLock(タイムアウト)機能を使用する必要があるため、ReentrantLockを使用する必要があります。
私の両方の質問に答えると答えを受け入れます。ありがとう。 – Lee