2016-05-28 2 views
1
public class ThreadString extends Thread { 
    String str = "ABC"; 

    public void run() { 
     str = "abc"; 
    } 
} 

если потоки имеют доступ к вышеперечисленному методу, Ссылка на «ABC» теперь указывает на «abc», как он будет работать внутри?Как класс String является потокобезопасным в java?

+2

'String' является неизменным. Все, что вы делаете, это изменение ссылки. –

+0

Этот класс не является потокобезопасным. –

+2

Ну, у тебя название спрашивает что-то другое, чем ваш текст. Если вы хотите получить ответ на свой вопрос в названии, прочитайте [this] (http://stackoverflow.com/questions/9303532/immutable-objects-are-thread-safe-but-why) или [это] (http://stackoverflow.com/questions/25224033/does-immutability-guarantee-thread-safety). – Tom

ответ

4

String s на Java неизменяемы. Вы не изменяете String, вы просто указываете на другое значение. С этой точки зрения это потокобезопасно - str либо "ABC", либо "abc", это не может быть чем-то недействительным или незаконным.

+2

'str' может быть настроено на что угодно: поле не является приватным. –