Differenze tra le versioni di "Java/Multithreading"

m
Update syntaxhighlight tags - remove use of deprecated <source> tags
m (Metto il box completo)
m (Update syntaxhighlight tags - remove use of deprecated <source> tags)
 
Creo una classe ''Chiamato'' che estende Thread:
 
<sourcesyntaxhighlight lang="java">
class Chiamato extends Thread
{ public void run(){
}
}
</syntaxhighlight>
</source>
 
Poi, eseguo il thread.
<sourcesyntaxhighlight lang="java">
public static void main(String argc[]){
Chiamato p = new Chiamato();
}
}
</syntaxhighlight>
</source>
 
Al contrario del solito, la funzione run ritorna subito, ma il processo (l'oggetto istanziato) resta attivo.
===Metodi synchronized===
Innanzitutto è possibile indicare che un metodo non può essere invocato simultaneamente da più thread con la parola chiave '''synchronized'''
<sourcesyntaxhighlight lang="java">
synchronized void muovi(String nome,String direzione){
...
}
</syntaxhighlight>
</source>
 
in questo modo se un thread chiama il metodo quando questo sta già venendo eseguito da un altro thread viene messo in attesa finché l'esecuzione termina.
Questo fa sì che il programmatore creda di avere modificato una variabile ma alcuni thread non ne vedono immediatamente il valore cambiato.
Per disattivare questo meccanismo bisogna utilizzare la parola chiave '''volatile''', che indica alla JVM di non ottimizzarla rendendone la manipolazione effettivamente atomica.
<sourcesyntaxhighlight lang="java">
public volatile boolean pronto=true;
</syntaxhighlight>
</source>
[[Categoria:Java|Threads]]
{{Avanzamento|75%|6 giugno 2010}}
266

contributi