View Single Post
Old 29-05-2013, 17:06   #1
zanardi84
Senior Member
 
L'Avatar di zanardi84
 
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5744
[JAVA][Risolto] uno strano caso (threads)

Nel mio allargare l'orizzonte di java mi sto imbattendo nei problemi di concorrenza dei thread. Ho creato una semplice applicazione che rappresenta 3 cronometri. Uno stampa il tempo ogni secondo, uno ogni 2 e uno ogni 3. Dell'output me ne frego perchè non è il mio attuale scopo..

Ho notato che sbaglia il tempo quando stampa nel caso dei 2 o 3 secondi. Ok, si legge che non sempre in un metodo sleep si può avere la precisione, ma nel mio caso ad un certo punto sbaglia anticipando! Non vorrei che ci fossero problemi nel mio codice.

Queste sono le classi

Codice:
public class Orologio implements Runnable
{
	private int secondi = 0;
	
	public void setSecondi()
	{
		secondi++;
	}
	
	public int getSecondi()
	{
		return secondi;
	}

	@Override
	public void run()
	{
		while(true)
		{
			System.out.println(this.getSecondi());
			try
			{
				Thread.sleep(1000);
			}
			catch(InterruptedException e){}
			this.setSecondi();
		}
	}
}
Codice:
public class Temporizzatore implements Runnable
{

	private int secondi;
	private String nome;
	private Orologio o;
	public Temporizzatore(int secondi, String nome, Orologio o)
	{
		this.secondi = secondi;
		this.nome= nome;
		this.o = o;
	}
	
	@Override
	public void run()
	{
		while(true)
		{
			System.out.println(nome+" "+o.getSecondi());
			try
			{
				Thread.sleep(secondi*1000);
			}
			catch(InterruptedException e){}
		}
		
	}

}
Codice:
public class Main
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		Orologio o = new Orologio();
		Thread orologio = new Thread(o);
		Thread t1 = new Thread(new Temporizzatore(1, "Primo cronometro", o));
		Thread t2 = new Thread(new Temporizzatore(2, "Secondo cronometro", o));
		Thread t3 = new Thread(new Temporizzatore(3, "terzo cronometro", o));
		orologio.start();
		t1.start();
		t2.start();
		t3.start();

	}

}
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti.

Ultima modifica di zanardi84 : 30-05-2013 alle 14:23.
zanardi84 è offline   Rispondi citando il messaggio o parte di esso