Mon professeur dans un niveau supérieur de classe java sur le filetage a dit quelque chose que je n'étais pas sûr de.
Il a déclaré que le code suivant ne serait pas nécessairement de mise à jour de l' ready
variable. Selon lui, les deux fils ne partageons pas nécessairement la variable statique, en particulier dans le cas lorsque chaque thread (thread principal contre ReaderThread) est en cours d'exécution sur son propre processeur et donc ne partage pas les mêmes registres/cache/etc et un CPU de ne pas mettre à jour les autres.
Essentiellement, il dit qu'il est possible qu' ready
est mis à jour dans le thread principal, mais PAS dans le ReaderThread, de sorte que ReaderThread en boucle à l'infini. Il a également affirmé qu'il était possible que le programme d'impression de '0' ou '42'. Je comprends comment '42" pourrait être imprimé, mais pas de "0". Il a mentionné ce serait le cas lorsque l' number
variable est définie sur la valeur par défaut.
J'ai pensé que peut-être il n'est pas garanti que la statique de la variable est mise à jour entre les threads, mais cela me semble très étrange pour Java. L' ready
volatile corriger ce problème?
Il a montré ce code:
public class NoVisibility { private static boolean prêt; private static int nombre; private static de la classe ReaderThread extends Thread { public void run() { while (!prêt) Thread.rendement(); Système.out.println(nombre); } } public static void main(String[] args) { nouveau ReaderThread().start(); nombre = 42; prêt = true; } }