Timingprobleme mit Threads

Wolfsbein

Erfahrenes Mitglied
Hallo
wir haben im Prinzip zwei Komponenten: Einen Berechnungskern, der in einem Thread t1 läuft und eine kleine Timerkomponente in einem zweiten Thread t2. Aus bestimmten Gründen wollen wir dass, falls der Berechnugskern schneller war als X Sekunden, dieser wartet bis ihm der Timer sagt, du darfst jetzt weiterrechnen. Dazu hätten wir einfach ein join von t1 auf t2 aufgerufen. Da es sich aber um ms Intervalle handeln kann ist diese Methode wohl nicht praktikabel, weil das dauernde Neuerzeugen des Threads t2 würde wohl länger dauert, als er überhaupt läuft.
Es gäbe noch die Timerklassen in Java, die sind aber wohl auch zu langsam.
Hat wer eine Idee wie mans anders machen kann?
 
Hallo!

Wie wär's denn damit?
Code:
/**
 * 
 */
package de.tutorials;

import java.util.Random;

/**
 * @author Tom
 * 
 */
public class ThreadExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		final long MIN_DURATION = 5000L;

		new Thread() {

			Random rnd = new Random();

			public void run() {
				while (true) {

					long delta = -System.currentTimeMillis();
					System.out.println("begin operation @" + delta);
					complexComputation();
					delta += System.currentTimeMillis();
					System.out.println("operation lasted : " + delta);

					if (delta < MIN_DURATION) {
						try {
							long someSeconds = MIN_DURATION - delta;
							System.out.println("sleeping: " + someSeconds);
							sleep(someSeconds);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
				}
			}

			private void complexComputation() {
				long sleep = rnd.nextInt(5) * 1000L;
				try {
					sleep(sleep);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}.start();
	}

}

Gruß Tom
 
Vielen Dank. Ziemlich genau so werden wir das machen. Auf die Idee einfach per Systemzeit nachzuschauen sind wir sehr spät gekommen. Das kommt davon wenn man in der Vorlesung immer gepresst bekommt, man solle alles threaden ;).
 
Zurück