Thread asincroni

di il
1 risposte

Thread asincroni

Ragazzi ho bisogno del vostro aiuto, vi spiego la mia situazione:

io ho un Listener in ascolto di messaggi, devo far in modo che se vengono ricevuti messaggio A e entro TOT tempo messaggio B accade una cosa, altrimenti se non viene ricevuto il messaggio B ne accade un'alra.

Per questo ho una variabile boolean (check) in Listener che mi dice se è stato ricevuto il messaggio B. In oltre, al ricevere del messaggio A chiamo un altro thread (thread2) il quale si mette il sleep TOT secondi poi controlla la variabile check e se è true fa una cosa se è false ne fa un altra.

In oltre quando il Listener riceve il messaggio A check diventa true, quando riceve il messaggio B check è false.

Il problema è che il Listener aspetta che termini il suo lavoro il thread2 per occuparsi del messaggio B e quindi non funziona il mio approccio...

E' come se i 2 thread fossero correlati... Ma non dovrebbero essere indipendenti l'uno dall'altro così che il Listener possa ricevere altri messaggi anche quando thread2 è in sleeep?

vi posto il codice:

//Listener.java

//da qualche parte che ora non vi interessa faccio
ExternalThread t = new ExternalThread(this);
t.start();

public void messaggioA() {
        check = true;
	t.callFunction();
}

public void messaggioB() {
        check = false;

}

//Thread2.java

public class Thread2extends Thread {


    Listener listener = null;

    public ExternalThread(MyListener listener){
        this.listener = listener;
    }

    public void callFunction(){
        try {
            sleep(1000);
        } catch (InterruptedException ex) {
            Logger.getLogger(ExternalThread.class.getName()).log(Level.SEVERE, null, ex);
        }
        if (!listener.check(idSymbol)){
           System.out.println("Method called");
        }
        else
            System.out.println("Method NOT ncalled");
    	}
    }

}
Sapete dirmi perchè?

1 Risposte

  • Re: Thread asincroni

    Ci sono riuscita...

    Il problema era che non controllavo la variabile check nel metodo run del thread2, ma la controllavo in un metodo da me implementato nella classe thread 2.

    Quindi nel listener devo settare la variabile check (a seconda dell'arrivo del messaggioA o B) e nel run del thread2 devo controllare ciclicamente tale variabile, quando questa diventa true chiamo il metodo callFunction() che si mette in sleep per tot tempo e poi ricontrolla la variabile check se questa è ancora true si comporta in un modo altrimenti in un altro...

    Grazie lo stesso cmq...
Devi accedere o registrarti per scrivere nel forum
1 risposte