var object = new Object() {
volatile int x;
};
new Thread(() -> {
synchronized (object) {
int x = object.x;
}
}).start();
synchronized (object) {
object.x = 123;
}
class Example<T> {
volatile T x;
Object m = new Object();
void set(T x) {
synchronized (m) {
this.x = x;
}
}
T get() {
synchronized (m) {
return x;
}
}
}
var object = new Object() {
volatile int x;
};
new Thread(() -> {
synchronized (object) {
int x = object.x;
}
}).start();
synchronized (object) {
object.x = 123;
}