Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Java] Thread laten wachten op Timer

Pagina: 1
Acties:

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 13-11 10:23
Ik heb een thread met daarin een Timer object, en ik wil dat dit Timer object wordt uitgevoerd terwijl de Thread blijft draaien. Wat er nu gebeurt is namelijk dat de Thread stopt omdat hij klaar is met run(), en daarna wordt de Timer nog actief.

Voorbeeld code:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Het programma:
Task task = new Task();
Thread taskThread = new Thread(task);
taskThread.start();

// De Task klasse:
public class Task implements Runnable {
  public void run () {
    javax.swing.Timer timer;
    timer = new javax.swing.Timer(5000, this);
    timer.setInitialDelay(5000);
    timer.setRepeats(true);
    timer.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            System.out.println("Dit komt nadat de thread al klaar is");
        }
    });        
    timer.start();
    System.out.println("We zijn meteen klaar met deze thread.");
  }
}

Ik neem ook aan dat de actie van de Timer (de output) dan ook niet in de thread wordt gedaan, maar in het object "task". De taskThread.isAlive() geeft ook aan dat de thread niet meer draait.

Hoe zorg ik ervoor dat de thread blijft wachten tot de Timer ook klaar is. Met deze Timer zou dat dus nooit zijn.

  • GrooV
  • Registratie: September 2004
  • Laatst online: 19-11 00:16
Moet die timer perse in jou thread staan? Anders moet je je thread gewoon door laten lopen (Met een while & sleep bijvoorbeeld)

[ Voor 17% gewijzigd door GrooV op 02-04-2008 02:13 ]


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:22
In c# zou ik hiervoor een manual/autoresetevent gebruiken. Bestaat er niet zoiets in Java ook toevallig?

Edit: toch even gekeken...
Miscchien dat je iets met de wait() en notify() methodes kan doen?
notify
public final void notify()Wakes up a single thread that is waiting on this object's monitor. If any threads are waiting on this object, one of them is chosen to be awakened. The choice is arbitrary and occurs at the discretion of the implementation. A thread waits on an object's monitor by calling one of the wait methods.
wait
public final void wait(long timeout)
throws InterruptedExceptionCauses current thread to wait until either another thread invokes the notify() method or the notifyAll() method for this object, or a specified amount of time has elapsed.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Het programma:
Task task = new Task();
Thread taskThread = new Thread(task);
taskThread.start();

// De Task klasse:
public class Task implements Runnable {
  Object waitObject = new Object();
  public void run () {
    javax.swing.Timer timer;
    timer = new javax.swing.Timer(5000, this);
    timer.setInitialDelay(5000);
    timer.setRepeats(true);
    timer.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            System.out.println("Dit komt nadat de thread al klaar is");
            waitObject.notify(); // Of notifyAll();
        }
    });        
    timer.start();
    waitObject.wait(); // Wacht op notify();
    System.out.println("We zijn meteen klaar met deze thread.");
  }
}

Niet getest, verzin maar wat..

[ Voor 122% gewijzigd door sig69 op 02-04-2008 08:29 ]

Roomba E5 te koop


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Je kunt ook kijken naar de CountDownLatch klasse.
http://java.sun.com/j2se/...rrent/CountDownLatch.html

Sowieso is het nieuwe java.util.concurrent package de moeite waard om naar te kijken. Dan programmeer je toch op een net iets hoger niveau dan met wait/notify/sync.

Fat Pizza's pizza, they are big and they are cheezy


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
Waarom niet gewoon een nieuw thread starten voor de timer, die laten tellen en je hoofdthread laten wachten op de timer dmv TimerThread.join(); ?

~ Mijn prog blog!