Я прочитал, что класс 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).