Я пишу класс на Java, который многопоточен, поскольку он инициализирует и использует отдельный поток для обновления своих частных полей.Класс internal thread-safety
class Foo {
private volatile Byte channel = new Byte(0);
private volatile Byte mode = new Byte(0);
public Foo() {
Thread t = new Thread(new UpdateFields());
t.setDaemon(true);
t.start();
}
public Byte getChannel() {
return this.channel;
}
public Byte getMode() {
return this.mode;
}
private class UpdateFields implements Runnable {
@Override public void run() {
Byte data[];
//get new data[]...
channel = data[0];
mode = data[1];
}
}
}
Вопрос в том, является ли этот класс внутренним поточно-безопасным? Из того, что я прочитал относительно неизменяемых объектов, таких как Байт и т. Д., Является то, что они по сути являются потокобезопасными.
EDIT: добавлены значения по умолчанию для полей
поэтому для поддержания безопасности потоков полей классов я должен использовать класс AtomicReference, так что при чтении или записи полей он синхронизируется –
Ну, 'volatile 'обеспечивает синхронизацию памяти. То, что делает 'AtomicReference' (которое использует внутреннюю ссылку' volatile'), обеспечивает _atomic_ обновление двух полей @GeoP. – Gray
ahh Я вижу спасибо! –