Hallo!
Ich hätte mal eine Frage, da ich aus der Doku des "ExecutorService" nicht ganz schlau werde. Wenn ich einen Task mit executor.submit(Runnable) ausführe und das Runnable z.B. so aussieht:
Es geht nun um folgendes: Es ist bei mei garantiert, dass diese Runnable niemals GLEICHZEITIG ausgeführt werden kann aber hintereinander und vorallem in verschiedenen Thread theoretisch.
Denn ein Executor nutzt ja meist mehrere Threads, sprich beim erneuten Ausführen könnte es doch theoretisch Probleme geben, oder ? Ich meine, es gibt keine Racecondition in dem Sinne, da es nicht konkurrierend ausgführt wird, aber was ist mit Sichtbarkeit von geänderten Varialben ? Da könnte es Probleme geben, oder ?
Also z.b. hierbei (Wirklich nur zur Verdeutlichung):
Meine Frage ist nun: Würde man erfoglreich eine Aufzählung von 0 - 999 in der Console sehen, oder nicht ? Also ich meine, ist es garantiert oder kann das ganze schiefgehen ?
Ich hätte mal eine Frage, da ich aus der Doku des "ExecutorService" nicht ganz schlau werde. Wenn ich einen Task mit executor.submit(Runnable) ausführe und das Runnable z.B. so aussieht:
Java:
new RemoteRunnable() {
int i = 0;
@Override
public void run() {
System.out.println(i++);
}
};
Es geht nun um folgendes: Es ist bei mei garantiert, dass diese Runnable niemals GLEICHZEITIG ausgeführt werden kann aber hintereinander und vorallem in verschiedenen Thread theoretisch.
Denn ein Executor nutzt ja meist mehrere Threads, sprich beim erneuten Ausführen könnte es doch theoretisch Probleme geben, oder ? Ich meine, es gibt keine Racecondition in dem Sinne, da es nicht konkurrierend ausgführt wird, aber was ist mit Sichtbarkeit von geänderten Varialben ? Da könnte es Probleme geben, oder ?
Also z.b. hierbei (Wirklich nur zur Verdeutlichung):
Java:
RemoteRunnable runnable = new RemoteRunnable() {
int i = 0;
@Override
public void run() {
System.out.println(i++);
}
};
for(int i = 0; i < 1000; i++) {
/*
* Es kann immer nur sequentiell abgearbeitet werden. Inwiefern das sinnvoll
* möchte ich hier nicht diskutieren :D Es geht eigentlich um einen anderen
* Zusammenhang, aber das hier modelliert das ganze viel besser/einfacher.
*/
executor.submit(runnable).get();
}
Meine Frage ist nun: Würde man erfoglreich eine Aufzählung von 0 - 999 in der Console sehen, oder nicht ? Also ich meine, ist es garantiert oder kann das ganze schiefgehen ?