Jetzt gibt es gute Antworten auf diese bereits auf Stackoverflow, aber sie geben mir nicht die endgültige Antwort, die ich will.Ist alles, was vor thread.start passiert ist, für den erstellten Thread sichtbar? Callimg start?
Sagen Sie eine Methode
Dosomething();
doAnother();
int x = 5;
Runnable r = new Runnable(){
public void run(){
int y = x;
x = 7;
System.out.println(z);}
}
new Thread(r).start()
Jetzt kommt diese Methode inzwischen läuft und vor Thread.start Aufruf, einige globale nichtflüchtigen Variablen z geändert wurde 5 von 4.
Würde das Programm sein garantiert 5 zu drucken, da z vor thread.start passiert ist?
Auch wenn wir darüber reden, dann ist es sicher zu sagen, dass thread.start() niemals jemals nachbestellt werden kann.
Bedeutung in Bezug auf diesen Thread, der Start aufgerufen wird, ist es, als ob alles bis zu diesem Punkt sequenziell ist. Zum Beispiel sagen wir
int k = 8;
new Thread(() -> {}).start()
Jetzt haben ... Es würde nicht einen Unterschied in der Perspektive dieses Themas machen, ob der Start zuerst aufgerufen wird oder k zugeordnet 8. So können diese neu geordnet werden, sondern wegen der geschieht vor der Garantie, ist das nicht möglich?
Die Java-Spezifikationen sagen nicht eine starke Aussage, die das sagt. Vielmehr sagt er
Wenn eine Anweisung Thread.start() aufruft, jede Aussage, die mit dieser Aussage
jedoch k = 8 nicht, dass ein vor Beziehung geschieht mit dieser Aussage ein geschieht zuvor Beziehung hat ...
im nicht einmal sicher, ob sie das, was etwas zu bedeuten hat ein geschieht, bevor Beziehung mit der Startmethode, wenn Sie zum Beispiel mit dem gleichen Monitor gesperrt
synchronized(this){ int k = 8;}
synchronized(this) { new Thread(() -> {}).start();}
für einen erschreckenden Fall, was wir diesen Code hatten
Socket con = socket.accept();
Runnable r = new Runnable(){
public void run(){
handleRequest(con)}
}
new Thread(r).start();
Und dann der neue Thread passiert, dass Con null sein?
Kann mir jemand eine definitive Antwort zu diesen Themen geben?
Haben Sie diesen Thread gesehen? https://stackoverflow.com/questions/7128662/does-a-thread-start-causes-a-memory-barrier-shared-variables-will-be- –
Ja, aber ich denke, ich wollte mehr Bestätigung geben die Beispiele Ich gab, seit ich es schwer hatte, andere Gedanken zu interpretieren. Trotzdem schätzen Sie den Link – katiex7