Visualizzazione dei risultati da 1 a 9 su 9

Discussione: uscita da wait forzata

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    82

    uscita da wait forzata

    Sto sclerando da un paio di giorni e non trovo soluzione
    L'assistente parte e va in wait a questo punto la cond è verificata e devo sbloccare l'assistente che era in attesa perchè possa terminare. Io non possiedo l'oggetto su cui lui è in attesa per cui devo risvegliarlo in altro modo.

    codice:
    	static Assistant ass = new Assistant();
    	
    	public static void main(String argv[]) throws Exception {
    		
    		ass.start();
    		
    		new Thread(new Runnable(){
    			public void run(){
    			while(true){
    					if(cond)
    							ass.interrupt();				
    			}}}).start();
    	}
    	
    	public void run(){
    		waitEle();
    		System.out.println("fine");	
    
    	}
    la funzione interrupt non funziona e non trovo qualcosa di simile. Grazie dell'aiuto

  2. #2
    Terminare un thread così non è un modo sicuro.
    Se è in wait, o gli mandi un notify() per farlo riprendere e quindi uscire (gestendo questo) oppure devi cambiare il codice non usando wait ma un ciclo che termina quando, per esempio, una variabile booleana uscita è true. Crei un metodo per cambiare questa variabile, e quando lo richiami il thread terminerà.
    lolide
    Java Programmer

    Informati

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    82
    in effetti la mia prima scelta era caduta sullo stesso algoritmo che hai detto solo che non è performante. Un while potenzialmente infinito consuma potenza di calcolo e se ci metto una sleep ho un problema di spreco di tempo. Il codice che ho postato all'inizio funziona se uso una wait diretta, ma purtroppo nel mio caso chiamo una funzione che chiama una wait e così non va bene

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    82
    quindi se io metto il thread in attesa su qualcosa che dipende da un'altra applicazione non cè alcun modo di riprenderne il controllo?

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    che intendi riprenderne il controllo? Se il thread è in attesa una notify lo sblocca: notify gli dice che quello che aspettava adesso è pronto. Quindi rimuovi la causa del blocco e ritenta

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    82
    il problema è che io non lo metto in wait ma chiamo una funziona che richiama una funzione che lo mette in wait. Se io lancio una notify nel thread "ass" non ha l'effetto voluto. Non posso lanciare una notify dall'altro lato perchè non è detto che si risveglio lui ma un altro...

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    devi farti scrivere da qualche parte il pid e questo deve essere nodo al thread (ogni thread deve conoscere il suo pid) in modo che prima della notify vai a dire chi vuoi che si svegli (tramite pid) e a quel punto al risveglio, se il thread del pid coincide con quello voluto si risveglia, altrimenti si rimette in wait

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    82
    penso che tu ti riferisca ai pthread e io non li posso usare

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    qualcosa di simile, devi comunque mantenere un riferimento alla risorsa, altrimenti è quasi impossibile distinguere un elemento dall'altro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.