• Embed Doc
  • Readcast
  • Collections
  • CommentGo Back
Download
 
Thread Java - Introduzione
Primo esempio: il metodo Thread.sleep
Il linguaggio di programmazione Java permette di creare e gestire i thread. A talproposito, Java fornisce la
classe
 
Thread
, del package
 java.lang
, che è unasottoclasse diretta della superclasse cosmica Object.
ObjectThread
Prima di iniziare l'analisi della classe Thread, consideriamo il seguente esempio.
Si vuole scrivere un programma che visualizza le stringhe memorizzatein un array, una per volta e a distanza di qualche secondo l'unadall'altra.
Il programma è molto semplice: dopo aver inizializzato l'array è sufficienteinserire in un ciclo for la stampa a video degli elementi dell'array. Per introdurreun ritardo tra una visualizzazione e l'altra, si può utilizzare il metodo
 sleep
dellaclasse Thread.
public static void 
sleep
(long 
millis
)throwsInterruptedExceptionSleep è un metodo statico, che interrompe il thread per il numero di millisecondispecificato come parametro. Se il thread è già interrotto, il metodo lancial'eccezione InterruptedException; pertanto, la chiamata a sleep deve essereracchiusa nel costrutto try.Il codice del programma è il seguente:
 public class
SequenzaStringhe{
 public
 
static
 
 void 
main(String[] args){String[] stringhe={"stringa 1","stringa 2","stringa 3"};
int
indiceCorrente=-1;
for
(
int
i=1;i<=9;i++){indiceCorrente++;
if
(indiceCorrente==stringhe.length){indiceCorrente=0;}System.
out
.println(stringhe[indiceCorrente]);
Autore: Cinzia BocchiUltimo aggiornamento: 18/11/2011
1
 
try
{Thread.
sleep
(4000);}
catch
(InterruptedException e){System.
out
.println("thread interrotto");}}}}
Questo semplice programma origina
un solo thread
, che viene sospeso per 4secondi. Il thread non può essere interrotto ma solo distrutto, terminando ilprogramma oppure occorre attendere che il ciclo for termini.
Thread di sistema
In Java, esistono un certo numero di thread che vengono avviati dalla virtualmachine in modo del tutto trasparente all’utente. Tra questi:
un thread per la gestione delle interfacce grafiche responsabile della catturadi eventi e dell’aggiornamento dei contenuti dell’interfaccia grafica (
thread dicomunicazione degli eventi
);
il
garbage collection
, responsabile di trovare gli oggetti non più referenziatie quindi eliminabili dallo spazio di memoria dell’ applicazione;
lo stesso metodo main() di una applicazione che viene avviato come unthread (
thread principale
) sotto il controllo della java virtual machine.
Secondo esempio: thread e swing
Creiamo una versione con interfaccia grafica del programma del precedenteesempio. La finestra principale contiene:
un pannello centrale per visualizzare le stringhe;
un pulsante avvia nell'area sud del frame.Facendo clic sul pulsante avvia, inizia la visualizzazione delle stringhe.
import
java.awt.BorderLayout;
import
java.awt.Container;
import
java.awt.Graphics;
import
java.awt.event.ActionEvent;
import
java.awt.event.ActionListener;
import
javax.swing.JButton;
import
javax.swing.JFrame;
import
javax.swing.JPanel;@SuppressWarnings("serial")
 public class
SequenzaStringhe
extends
JFrame{
 public
 
static
 
final
 
int
 
LARGHEZZA 
= 300;
 public
 
static
 
final
 
int
 
ALTEZZA 
= 300;
 private
 
int
 indiceCorrente=-1;
 private
StringstringaCorrente="";
Autore: Cinzia BocchiUltimo aggiornamento: 18/11/2011
2
 
 public
SequenzaStringhe(){
super
("Sequenza di stringhe");setSize(
LARGHEZZA 
,
ALTEZZA 
);setDefaultCloseOperation(JFrame.
EXIT_ON_CLOSE 
);Container contentPane= getContentPane();JButton avvia=
new
JButton("avvia");
final
Canvas canvas=
new
Canvas();contentPane.add(avvia,BorderLayout.
SOUTH 
);contentPane.add(canvas,BorderLayout.
CENTER
);
final
String[] stringhe= {"stringa 1","stringa 2","stringa 3"}; avvia.addActionListener(
new
ActionListener(){
 public
 
 void 
actionPerformed(ActionEvent e){
try
{
for
(
int
i=0;i<9;i++){indiceCorrente++;System.
out
.println("indice corrente="+indiceCorrente);
if
(indiceCorrente==stringhe.length) {indiceCorrente=0;}stringaCorrente=stringhe[indiceCorrente];canvas.paint(canvas.getGraphics());Thread.
sleep
(4000);}}
catch
(InterruptedException ecc){System.
err 
.println("thread interrotto");}}});}
class
Canvas
extends
JPanel{
 public
 
 void 
paintComponent(Graphics g){
super
.paintComponent(g);System.
out
.println("stringa corrente= "+stringaCorrente); g.drawString(stringaCorrente,100,100);}}
 public
 
static
 
 void 
main(String args[]){SequenzaStringhe frame=
new
SequenzaStringhe();frame.setVisible(
true
);}}
Autore: Cinzia BocchiUltimo aggiornamento: 18/11/2011
3
of 00

Leave a Comment

You must be to leave a comment.
Submit
Characters: ...
You must be to leave a comment.
Submit
Characters: ...