Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Utilizzo dei timer!

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    13

    Utilizzo dei timer!

    Ciao c'è qualcuno tanto gentile da spiegarmi per bene come funzionano i timer!in particolare me ne servirebbe uno che mi invocasse un metodo dopo la fine del conteggio e un'altro che che invocato un metodo lo stesso stia in esecuzione per un determinato lasso di tempo!grazie..
    ciao
    Roby

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Utilizzo dei timer!

    Originariamente inviato da rrr85
    Ciao c'è qualcuno tanto gentile da spiegarmi per bene come funzionano i timer!in particolare me ne servirebbe uno che mi invocasse un metodo dopo la fine del conteggio e un'altro che che invocato un metodo lo stesso stia in esecuzione per un determinato lasso di tempo!grazie..
    ciao
    Vedi questa discussione in cui avevo spiegato le due principali classi Timer di Java SE.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    13
    Ah si ora l'ho letta e a quanto pare la cosa che servirebbe a me è la classe java.util.Timer!
    Ma ora ti spiego io faccio partire un metodo start() che mi calcola una funzione e somma tutto in un contatore..ora io vorrei che dopo es:30sec mi si blocchi il questo metodo invocando il metodo stop() e mi venga restituito il conteggio totale...come fare??
    Roby

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    13
    Scusa ma forse sono stato poco chiaro..mi spigo meglio...io vorrei utilizzare un metodo start() che mi faccia partire un metodo calcola() il quale dopo 30sec si dovrebbe fermare e restituire il contatore che mi ha sommato tutti i risultati delle mie funzioni
    Roby

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    16
    Puoi creare un thread dove c'è la tua funzione, farla partire e poi dopo trenta secondi stopparla.

    es.
    Thread prog = new Thread(new Programma());
    prog.start();
    Thread.sleep(30000);
    prog.stop();


    class Programma implements Runnable{
    Programma() {
    }

    public void run() {
    funzione();
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    13
    Originariamente inviato da titusx
    Puoi creare un thread dove c'è la tua funzione, farla partire e poi dopo trenta secondi stopparla.

    es.
    Thread prog = new Thread(new Programma());
    prog.start();
    Thread.sleep(30000);
    prog.stop();


    class Programma implements Runnable{
    Programma() {
    }

    public void run() {
    funzione();
    }
    ok ho capito più o meno ma nel caso mio cosa dovrebbe essere new Programma()??la funzione calcola()??potrebbe essere scritto in questo modo il codice secondo voi??

    Thread prog = new Thread(new calcola());
    prog.start();
    Thread.sleep(30000);
    prog.stop();


    class calcola implements Runnable{
    calcola() {
    }

    public void run() {
    calcola() o proprio la funz es x +=1;
    }
    l'ultima cosa..questo lo metto nel main o dove??
    Roby

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da titusx
    Thread prog = new Thread(new Programma());
    prog.start();
    Thread.sleep(30000);
    prog.stop();
    No affatto, stop() di Thread è documentato come "deprecated" e "unsafe". Non dovrebbe essere mai usato. La terminazione di un thread deve essere realizzata facendo in modo che il thread stesso sia "cooperativo" nei confronti della terminazione. E come farlo dipende anche molto da quali operazioni deve fare il thread. Il caso più semplice è quello di usare una variabile (tassativamente marcata "volatile" o comunque acceduta in modo sincronizzato) che il thread di tanto in tanto controlla per sapere se deve terminare. Se però il thread è bloccato in una wait() o su un metodo di I/O allora la variabile non basta più e si deve usare il sistema di interruption, vedere interrupt() di Thread.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    13
    Originariamente inviato da andbin
    No affatto, stop() di Thread è documentato come "deprecated" e "unsafe". Non dovrebbe essere mai usato. La terminazione di un thread deve essere realizzata facendo in modo che il thread stesso sia "cooperativo" nei confronti della terminazione. E come farlo dipende anche molto da quali operazioni deve fare il thread. Il caso più semplice è quello di usare una variabile (tassativamente marcata "volatile" o comunque acceduta in modo sincronizzato) che il thread di tanto in tanto controlla per sapere se deve terminare. Se però il thread è bloccato in una wait() o su un metodo di I/O allora la variabile non basta più e si deve usare il sistema di interruption, vedere interrupt() di Thread.
    scusami ma dato che non sono molto ferrato in materia mi potresti scrivere un esempio di codice su come fare?altrimenti va a finire che mi confondo inutilmente in mezzo a tante cose...
    Roby

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    16
    Credo dica di usare interrupted invece di stop.
    Quindi:

    ...main(...){

    Thread prog = new Thread(new Programma());
    prog.start();
    Thread.sleep(30000);
    prog.interrupt();
    }

    class Programma implements Runnable{
    Programma() {
    }

    public void run() {
    funzione();
    }

    void funzione(){
    x+=1;
    }
    }

    Io ti consiglio cosi !!!

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da titusx
    Credo dica di usare interrupted invece di stop.

    Io ti consiglio cosi !!!
    Non proprio ... interrupt() in realtà non blocca o termina un bel nulla. Si limita solo ad impostare il "interrupted status" del thread. Se il thread sta facendo solo delle pure operazioni di computazione e nessun I/O o wait(), il fatto di invocare interrupt() sul thread non provoca una mazza. È il thread che deve essere "cooperativo" e invocare di tanto in tanto Thread.interrupted() per verificare se è stato interrotto.

    Se invece il thread è in una wait() la invocazione di interrupt() dall'esterno provoca il lancio di InterruptedException nel thread. Per altri casi si veda la documentazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.