Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 17 su 17
  1. #11
    Utente di HTML.it L'avatar di Framek
    Registrato dal
    Apr 2010
    Messaggi
    22
    Originariamente inviato da c0der
    Ti posto la mia soluzione, con un codice facilmente customizzabile.
    - thread T1 con frequenza 1 secondo ed esecuzione totale 3 secondi
    - thread T2 con frequenza 1 secondo ed esecuzione totale 4 secondi

    [/CODE]
    Ciao c0der... il codice funziona molto bene... difatti crea lo "start and stop" che mi serviva. Ma se ad un certo punto volessi interrompere il loop, posso invocare semplicemente il t2Handle.cancel(true); ???
    L'importante è non smettere di interrogarsi. La curiosità ha una precisa raggione per l'esistenza!

  2. #12
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Hai scritto gli import esattamente come nel mio esempio?
    Se non risolvi comunque basta che rimuovi il secondo import e sostituisci le 4 occorrenze di SECONDS con TimeUnit.SECONDS.
    È un banale enum (vedi http://docs.oracle.com/javase/1.5.0/.../TimeUnit.html)

    Ciao.

  3. #13
    Utente di HTML.it L'avatar di Framek
    Registrato dal
    Apr 2010
    Messaggi
    22
    infatti ho risolto subito poi...
    vedi su...
    L'importante è non smettere di interrogarsi. La curiosità ha una precisa raggione per l'esistenza!

  4. #14
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Ma se ad un certo punto volessi interrompere il loop, posso invocare semplicemente il t2Handle.cancel(true); ???
    Il modo più semplice è chiamare:
    scheduler.shutdown();
    Vedi: http://docs.oracle.com/javase/6/docs...shutdown%28%29

  5. #15
    Utente di HTML.it L'avatar di Framek
    Registrato dal
    Apr 2010
    Messaggi
    22
    Perfetto... grazie mille!
    L'importante è non smettere di interrogarsi. La curiosità ha una precisa raggione per l'esistenza!

  6. #16
    Utente di HTML.it L'avatar di Framek
    Registrato dal
    Apr 2010
    Messaggi
    22
    Ciao c0der, ok per lo stop, ma effettivamente volevo chiederti un'altra cosa. In pratica, è possibile che un processo che sto facendo avviare, abbia la durata di diversi secondi per la sua esecuzione...

    prima che venga rieseguita secondo lo scheduler impostato p.es. ogni 5 sec., la prima, che dura 60sec, termina la sua esecuzione e poi parte l'altra?

    Oppure la seconda esecuzione parte ancor prima che sia terminata la prima?

    Ed ancora, l'ultima istanza prima che parta il secondo processo, deve completarsi prima di "consegnare" l'esecuzione a T2. Lo fa? Opure è necessario impostare un tempo di attesa?
    L'importante è non smettere di interrogarsi. La curiosità ha una precisa raggione per l'esistenza!

  7. #17
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    La prima che hai detto (la prima, che dura 60sec, termina la sua esecuzione e poi parte l'altra)

    È spiegato nella documentazione:
    http://docs.oracle.com/javase/6/docs...orService.html
    << If any execution of this task takes longer than its period, then subsequent executions may start late, but will not concurrently execute. >>

    C'è inoltre un secondo aspetto, quello della riga:
    scheduler = Executors.newScheduledThreadPool(1);
    Essendo il threadpool formato da 1 solo thread non entrerà neanche in funzione la cancellazione di t1Handle
    fintanto che T1 non ha terminato. A questo puoi ovviare invece incrementando il pool a 2.

    Ciao.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.