Thread Daemon, ma siamo sicuri?

di il
12 risposte

Thread Daemon, ma siamo sicuri?

Salve ragazzi... oggi ho iniziato a lavorare con i thread daemon, ho fatto diverse ricerche e ho capito che questi sopravvivono al thread principale..

solo che provando non è stato così...

ovvero, quando uso thread non demoni, anche dopo che il thread che esegue il main, e quindi il thread principale, si chiude, questi continuano ad essere in esecuzione.

Quando invece uso thread demoni, questi terminano non appena termina il thread principale...

percui perchè si dice che un thread demone sopravvive alla morte del thread principale?

Spero possiate aiutarmi grazie!

12 Risposte

  • Re: Thread Daemon, ma siamo sicuri?

    Ciao Ultrasound, grazie per la risposta.

    In realtà ho chiamato setDaemon nel costruttore del mio thread.

    Ecco il codice:
    
    public class DemonThread extends Thread{
    	
    	int x;
    	
    	DemonThread(int x) {
    		
    		this.x=x;
    		setDaemon(true);
    		start();
    	}
    	
    	public void run() {
    		
    		int cont=0;
    		
    		while(true) {
    			
    			 try {
    				 
    			    System.out.println(x + cont);
    			    cont++;
    			    sleep(2000);
    			 }
    			 catch(InterruptedException e) {
    				 
    				 e.printStackTrace();
    			 }
    		}
    	}
    
    	public static void main (String [] args) {
    		
    		DemonThread [] dt= new DemonThread[5];
    		
    		for(int i=0;i<dt.length;i++)
    			dt[i]=new DemonThread(3);
    		
    	}
    }
    

    togliendo il setDaemon(true), i thread continuano ad essere in esecuzione anche al termine del main (dopo aver testato lo stato del thread principale con isAlive())

    qual è l'inghippo?
  • Re: Thread Daemon, ma siamo sicuri?

    Vi allego questa immagine:
    si legge chiaramente che:

    "Se ci sono dei thread demoni, quando tutti i thread non demoni terminano l'esecuzione il programma NON termina".


    E' sbagliata?
  • Re: Thread Daemon, ma siamo sicuri?

    La documentazione javadoc (che è il riferimento ufficiale, e di questa mi fido) di java.lang.Thread dice chiaramente:

    The Java Virtual Machine continues to execute threads until either of the following occurs:
    ....
    All threads that are not daemon threads have died


    Che vuol dire in sostanza: se c'è almeno 1 thread non-daemon, la virtual machine NON può terminare.

    E la documentazione di setDaemon lo rispiega, anche meglio:

    The Java Virtual Machine exits when the only threads running are all daemon threads.

    Ovvero, la virtual machine termina quando si accorge che ci sono solo thread daemon.
  • Re: Thread Daemon, ma siamo sicuri?

    Fantastico... adesso quindi cosa dovrò scrivere all'esame?

    La prof ha espressamente detto che:

    un thread daemon sopravvive al thread principale (cosa che nei suoi esempi non è vera perchè mantiene in vita il principale per un tempo "infinito")

    e mi ha anche detto chiaramente che se provo a chiudere un programma dal task manager di windows, questo terminerà il suo thread principale, e se ci sono thread demoni, questi saranno ancora visibili nel taskmanager con lo stesso nome del programma...

    a questo punto direi che la prof si sbagliava, e di grosso anche....Giusto?

    Ti ringrazio infinitamente per l'aiuto
  • Re: Thread Daemon, ma siamo sicuri?

    Francesco93 ha scritto:


    fantastico... adesso quindi cosa dovrò scrivere all'esame?
    Bella domanda ...... quello che è giusto o quello che si aspetta la prof?

    Francesco93 ha scritto:


    a questo punto direi che la prof si sbagliava, e di grosso anche....Giusto?
    Ehm ... sì.
  • Re: Thread Daemon, ma siamo sicuri?

    ultrasound91 ha scritto:


    puoi fare ricorso ad un giudice di pace.
    Ma tu vivi In Italia?
  • Re: Thread Daemon, ma siamo sicuri?

    Fin tanto che consigli di andare dalla prof. a ricevimento e parlarne, mi trovi d'accordo (ed è la soluzione).

    Se consigli al ragazzo di andare dal giudice di pace per una domanda del suo compito, allora non solo non vivi in Italia ma sulla Luna ...
  • Re: Thread Daemon, ma siamo sicuri?

    Sì ... adesso la questione diventa di "vita o di morte" .... ma non esagerare a sproposito ...

    Qui si tratta solamente di una SEMPLICE divergenza didattica che si appiana con il colloquio con la prof. che sarà quella che comunque ti darà un voto per la tua materia e che sarà anche in grado di fartela ripetere 10 volte, se vorrà ...

    Tutto il resto è teoria inutile. Lascia stare giudici e avvocati ...

    CONSIGLIO a Francesco ... parlane con la tua prof. ...
  • Re: Thread Daemon, ma siamo sicuri?

    ultrasound91 ha scritto:


    La prof. non può far ripetere un bel nulla per cattiveria.
    Deciso ... vivi sulla Luna
    Il contenuto della traccia d'esame
    Esistono gli orali ...
    La mia ipotesi è che la prof. in questione non è laureata in informatica.
    Probabilmente possiede un titolo in un settore differente, e ha ottenuto l'abilitazione all'insegnamento ad un esame di informatica (probabilmente un esame di primo anno).
    E quindi? Anche fosse? Vai lì e glielo dici all'orale?

    Ma dici seriamente??? O ci stai prendendo tutti in giro? Ma come ragioni?
  • Re: Thread Daemon, ma siamo sicuri?

    ultrasound91 ha scritto:


    Esistono gli orali ...
    Esistono le indagini e le prove, prove ottenibili con un registratore audio (previa autorizzazione del magistrato).
    Ma che dici???? Le indagini? Le prove? Un registratore audio?

    Hai visto troppi film ...
    Io ho detto che questo problema forse è sorto perchè la natura del titolo di studio del prof. potrebbe averlo portato ad insegnare la materia con un pò di superficialità.
    Lascia stare il titolo di studio di chi ti interroga all'università ...

    Anzi, per Francesco ... ti consiglio di NON pubblicare sul forum i nomi dei docenti nelle slide ...

    Molte volte le slide sono preparate in collaborazione con assistenti/laureandi che "toppano" qualcosa e i prof. non controllano perché impegnati su altre attività ... quindi, ripeto, semplicemente parlane alla prof. o all'assistente se effettivamente ti interessa. Tutti gli altri discorsi sono "puro tempo perso".
  • Re: Thread Daemon, ma siamo sicuri?

    Mi intrometto solo per dire una cosa:
    public class Ricorso extends Thread {
        public void run() {
            TimeUnit.DAYS.sleep(365*(r.nextInt(10-5+1)+5));
        }
    }
    public class Laurea extends Thread {
        public void run() {
            TimeUnit.DAYS.sleep(365*3);
        }
    
        public void conseguiLaurea() {
            System.out.println("Complimenti, ti sei laureato!!!");
        }
    }
    public class Main {
        public static void main(String[] args) {
            Ricorso ricorso=new Ricorso();
            Laurea laurea=new Laurea();
    
            laurea.start();
            
            Scanner sc=new Scanner(System.in);
            
            System.out.println("Decidi di fare ricorso? s/n");
            String decisione=sc.nextLine();
            sc.close();
    
            if(decisione.charAt(0)=='s' || decisione.charAt(0)=='S' ) {
                ricorso.start();
            }
    
            ricorso.join();
            laurea.join();
            laurea.conseguiLaurea();
    }
    Questo è il motivo per cui non devi fare ricorso
  • Re: Thread Daemon, ma siamo sicuri?

    Il tuo modo di ragionare sarebbe "teoricamente" giusto.

    Purtroppo in italia non è applicabile perchè le persone (oneste, per la maggior parte) hanno perso fiducia nelle istituzioni.
    Mi duole dirlo ma, in italia, viene considerato più il carnefice che la vittima.

    Se hai notato, inoltre, la gente preferisce farsi fare causa piuttosto che fare causa.
Devi accedere o registrarti per scrivere nel forum
12 risposte