Biến số emitting
có dễ bay hơi không? phương pháp emit()
được gọi từ các chủ đề khác nhau và phát ra phải được hiển thị.
Nhưng chỉ được truy cập trong các khối synchronized
. Các // ...
là những nơi mà công việc được thực hiện, nhưng emitting
không được tham chiếu ở đây.Là cần thiết bay hơi, trong trường hợp chỉ truy nhập được đồng bộ
Vì vậy, nếu cấu trúc của synchronized
được khắc phục, tôi vẫn cần volatile
cho emitting
hay không? (Và tại sao?)
static final class C {
boolean emitting = false; // shall be volatile ?
public void emit() {
synchronized (this) {
if (emitting) {
return;
}
// ...
emitting = true;
}
// ...
synchronized (this) {
if (!condition()) {
emitting = false;
return;
}
}
// ...
}
Frank