Newsgroup: it.comp.java
Titolo: dubbio su un thread demone

Supponiamo di avere un programma principale (con un thread main associato
automaticamente da Java), il programma principale crea una serie di
threads dei quali alcuni sono demoni, e si pone in ascolto di un evento
che verra' generato quando l'ultimo thread non demone termina.
Per quanto riguarda i threads demoni questi sono costituiti
essenzialmente da loops infiniti per cui non termineranno mai.
Mi sembra di aver capito che il programma principale termina non
appena riceve l'evento dall'ultimo thread non demone che termina,
nonostante ci siano alcuni demoni che non sono terminati... ho capito
male?
-- 
"difficilmente riusciremo ad arginare la diffusione dei virus finche' 
 esisteranno programmi come  u(z1...zn)=sel1(u z1...zn)=u" - Kleene

 male?
No,
i thread demoni non impediscono alla applicazione di terminare.
-- 
Luca Ferrari,
fluc...@libero.it


  public final void setDaemon(boolean on)
  Marks this thread as either a daemon thread or a user thread.
  The Java Virtual Machine exits when the only threads running
  are all daemon threads.
  This method must be called before the thread is started. 
  This method first calls the checkAccess method of this thread
  with no arguments. This may result in throwing a SecurityException
  (in the current thread).
  Parameters:
    on - if true, marks this thread as a daemon thread.
  Throws:
    IllegalThreadStateException - if this thread is active.
    SecurityException - if the current thread cannot modify this thread.
  See Also:
    isDaemon(), checkAccess()
-- Dario

 [CUT]
era solo per avere una conferma, avevo letto della roba in inglese
che mi aveva lasciato alcuni dubbi... il mio inglese non e' proprio
il massimo ^_^    comunque grazie


scusate, ancrora una curiosita'...
una volta che il thread main termina che fine fanno i demoni?
viene forzata la loro terminazione oppure? 


 viene forzata la loro terminazione oppure? 
Ti ripeto quanto scritto il 2/12:
   A program terminates all its activity and exits when one
   of two things happens:
     - All the threads that are not daemon threads terminate.
     - Some thread invokes the exit method of class Runtime
       or class System and the exit operation is not forbidden
       by the security manager.
Quindi quando il tuo thread main termina e non ci sono
altri thread non demoni allora il tuo programma termina,
cioe' la JVM finisce subito la sua esecuzione
come se fosse stato invocata una System.exit(0).
-- Dario

 sua esecuzione come se fosse stato invocata una System.exit(0).
ok, ma se ci fossero dei threads demoni creati dal thread main che magari
e' terminato, che fine fanno i threads demoni?



  afferma:
    A program terminates all its activity and exits when one
    of two things happens:
      - All the threads that are not daemon threads terminate.
      - Some thread invokes the exit method of class Runtime
       or class System and the exit operation is not forbidden
       by the security manager.
Ribadisco:
  C'e' scritto proprio "A program terminates all its activity" !
  Tutte (tutte) le sue attivita'.
-- Dario
P.S. Scusa se mi sono un po' lasciato andare in questa risposta.
     Ma mi sembrava tutto cosi' chiaro e limpido nella specifica
     che avevo gia' dato 4 giorni fa....
     Sono perdonato ?

      Sono perdonato ?
che fai... prima prendi a paraculare e poi chiedi scusa?
