Описан ли код ниже внутрипоточного семантического?Intra thread semantic для java-программы
static Integer sync;
public static void main(String[] args) throws Exception {
Runnable r = new Runnable() {
@Override
public void run() {
sync = 6;
System.out.println("written thread 1");
try {
Thread.sleep(9999);
} catch (InterruptedException ex) {
Logger.getLogger(IO.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println(sync);
}
};
Runnable t = new Runnable() {
@Override
public void run() {
sync = 2;
System.out.println("written thread 2");
try {
Thread.sleep(9999);
} catch (InterruptedException ex) {
Logger.getLogger(IO.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println(sync);
}
};
Thread th1 = new Thread(r);
Thread th2 = new Thread(t);
th1.start();
th2.start();
}
результат:
written thread 1
written thread 2
2
2 //!!!! Is intra-thread semantic violates?
JLS в 17,4 говорит:
[...] Как уже упоминалось ранее, все потоки должны соблюдать правильную внутрипоточная семантика для Java-программ. [...]
Я думал, что внутрипоточный семантический означает, что поток будет работать, поскольку это был единственный поток в программе. То есть значение, назначенное th1
, наблюдается только для th1
и для аналогичного для th2
.
Возможно, я правильно поняла семантическую концепцию внутри потока?
Возможно, вы ищете переменные состояния ThreadLocal (http://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html) вместо статического? –
@ GáborBakos Я просто хотел бы понять концепцию внутрипоточной семантики на примере. – 2014-09-13 15:30:26