I tipi di dati primitivi come int
& short
thread-safe in Java? Ho eseguito il codice seguente e non sono riuscito a visualizzare il risultato previsto 500 alcune volte.I tipi di dati primitivi thread-safe in Java
public class SampleThree extends Thread
{
static long wakeUpTime = System.currentTimeMillis() + (1000*20);
static int inT;
public static void main(String args[])
{
System.out.println("initial:" + inT);
for(int i=0; i<500; i++)
new SampleThree().start();
try {
Thread.sleep(wakeUpTime - System.currentTimeMillis() + (1000*30));
System.out.println("o/p:" + inT);
}
catch(Exception e){
e.printStackTrace();
}
}
public void run()
{
try {
long s = wakeUpTime - System.currentTimeMillis();
System.out.println("will sleep ms: " + s);
Thread.sleep(s);
inT++; // System.out.println(inT);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
Qui concomitanza 500 filetti aggiornerà la variabile int inT
. Thread principale dopo aver atteso che l'aggiornamento simultaneo sia completato, stampa il valore inT
.
Trova esempio simile here
No, non sono thread-safe. Se hai intenzione di leggere solo, dovresti considerare di rendere il membro 'volatile'. Se hai intenzione di leggere e scrivere da diversi thread, dovresti renderlo 'synchronized' –