Thread nach X-Sekunden beenden

Status
Nicht offen für weitere Antworten.
K

Klause

Gast
Hallo zusammen :)
Ich habe mehrere Threads gestartet und jeder hat eine random-Sekundenanzahl bei der Initialisierung übergeben bekommen. Nun möchte ich, dass der Thread sich selbst nach XY Sekunen beendet.
Wenn ich innerhalb meiner public void run() sleep aufrufe hält der Thread ja an... Aber ich möchte da erso lange "seine Sachen tut" bis die Zeit abgelaufen ist.

Hat jemand von Euch eine Idee?
Besten Dank.
 

ReatKay

Mitglied
mhn...

wie wärs so?

Code:
long zeitdauer = "WUnschzeit";
long maxTime = System.microtime() + zeitdauer ;

while (System.microtime < maxTime)
{
   // do was du willst ;)
}

// Thread beenden
[/code]
 
S

SlaterB

Gast
beim Start merkst du dir die Systemzeit und in der run schaust du 'ab und zu' nach der aktuellen Systemzeit und merkst, wann die Lebenszeit abgelaufen ist,

das 'ab und zu' kann man natürlich beliebig implementieren,
je nachdem, was die normale Aufgabe des Threads ist,
wenn das eine Schleife einer Aktion ist, die wenige Ms dauert, dann macht es Sinn, am Ende dieser Schleife einmal zu prüfen,

wenn der Thread hauptsächlich nix macht, dann sollte man die sleep()-Aufrufe so wählen, dass oft genug noch nach der Lebenszeit geschaut wird,
denkbar ist auch, die verbleibende Lebenszeit auszurechnen und genau so lange zu schlafen


edit:
zum Beispiel von ReatKay ist zu sagen, dass der Thread möglichst nicht 100% CPU-Auslastung nur zum Püfen der Zeit verwenden sollte,
wenn die Schleife noch andere Aktionen enthält, dann kann es ok sein, ansonsten unbedingt auch sleep() verwenden
 
K

Klause

Gast
Hab noch eine Frage :)
Das Thread-beenden macht mir noch probeme...
Die methode stop() habich ja nicht verfügbar, damit sich der Thread selber beendet...
Die anderen Funktionen die mir angeboten werden hab ich mir angeschaut, aber irgendwie nichts brauchbares gefunden.

Danke im Voraus,
Klaus
 

Niki

Top Contributor
Ein Thread ist dann beendet wenn die run Methode fertig ist. Also brauchst du einfach eine Möglichkeit diese zu beenden. Entweder mit return, oder ganz normal. Oder du steuerst eine Schleife mit einem Flag.... Auf dem Thread Objekt selber brauchst du aber keine Methode aufrufen (falls doch, dann verwende interrupt und isInterrupted)
 

xysawq

Bekanntes Mitglied
Du könntest auch einen Timer verwenden... hab das jetzt zwar nicht besonders schön programmiert, aber es läuft wunderbar, schont den Prozessor und man muss selber nichts prüfen.

Code:
import java.util.Timer;
import java.util.TimerTask;

public class ToDo extends TimerTask
{
	Timer timer = new Timer();
	int time = 0;
	boolean run = false;
	Running running = new Running();

	public void run()
	{
		if(!run)
		{
			run = true;
			running.start();
		}
		else
		{
			timer.cancel();
			run = false;
		}
	}
	
	public void setTime(int time)
	{
		this.time = time;
	}
	
	public void start()
	{
		timer.scheduleAtFixedRate(this, 0, time);
	}
	
	private class Running extends Thread
	{
		public void run()
		{
			while(run)
			{
				//Was auch immer getan werden soll.
			}
		}
	}
}

Aufruf und Start funktionieren z.B. so:
Code:
public class Main
{
	public static void main(String[] args)
	{
		ToDo todo = new ToDo();
		
		todo.setTime(5000);
		
		todo.start();
	}
}

Damit das ganze auch prozessorschonend bleibt sollest du sowas wie:
Code:
try
{
	Thread.sleep(0, 5000);
}
catch (InterruptedException e)
{}
am Ende deiner while(run)-Schleife setzten, damit der Prozessor eine kleine Pause hat ;).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
W Threads nach Thread Ende Variablen auslesen Java Basics - Anfänger-Themen 2
S Erste Schritte Suche nach einem guten JAVA-Buch (Definition im Thread) Java Basics - Anfänger-Themen 6
F nach thread.run() fortsetzen Java Basics - Anfänger-Themen 11
G nach Thread.start(); nochmal start(); aufrufen geht nicht Java Basics - Anfänger-Themen 4
S Thread nach Beenden erneut starten Java Basics - Anfänger-Themen 2
F Thread nach unaktivitätszeit stoppen Java Basics - Anfänger-Themen 7
Leyla Thread isInterrupt Java Basics - Anfänger-Themen 18
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
F influxdb Upload in eigenem Thread Java Basics - Anfänger-Themen 2
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
T Thread beenden aus zweiter Klasse Java Basics - Anfänger-Themen 4
A Thread - Synchronized Java Basics - Anfänger-Themen 10
A Thread Producer - Consumer Java Basics - Anfänger-Themen 1
A Thread-Semhapore Java Basics - Anfänger-Themen 0
A Thread Exchanger Java Basics - Anfänger-Themen 22
A Thread-Cyclicbarrier Java Basics - Anfänger-Themen 4
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
A Thread-Verklemmung Java Basics - Anfänger-Themen 10
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
A Thread find number Java Basics - Anfänger-Themen 8
F Thread.sleep() Java Basics - Anfänger-Themen 5
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 3
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 8
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
M Thread-Zustände Java Basics - Anfänger-Themen 6
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
B Endlosschleife Thread sauber beenden Java Basics - Anfänger-Themen 19
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 1
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 0
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
C Thread und TimerTask, Verstädnisproblem Java Basics - Anfänger-Themen 10
amgadalghabra Sorting Thread Launcher Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
A Thread Java Basics - Anfänger-Themen 4
A Thread Java Basics - Anfänger-Themen 1
A Thread Java Basics - Anfänger-Themen 0
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
B Thread / Prozess stoppen? Java Basics - Anfänger-Themen 22
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
W Thread Aufgabe - Vorgehensweise Java Basics - Anfänger-Themen 8
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 0
J Threads PrograssBar update während thread Java Basics - Anfänger-Themen 13
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
S Thread.sleep mit JProgressBar Java Basics - Anfänger-Themen 1
ralfb1105 Frage zu Thread Synchronisation mit wait() und notify() Java Basics - Anfänger-Themen 3
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
J Thread Handling Java Basics - Anfänger-Themen 9
A Problem mit Thread.sleep Java Basics - Anfänger-Themen 4
C Thread in Methode + raus aus der Schleife Java Basics - Anfänger-Themen 10
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
B Thread Problem Java Basics - Anfänger-Themen 7
N KeyListener in Thread Java Basics - Anfänger-Themen 0
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
D Ausgeben welcher Thread gerade Arbeitet Java Basics - Anfänger-Themen 8
N Threads Thread-Fehler Java Basics - Anfänger-Themen 2
F Thread um Uhrzeit ausführen Java Basics - Anfänger-Themen 5
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
J Exception in thread "main" Java Basics - Anfänger-Themen 1
F Thread der auf eine Queue wartet, sicher beenden Java Basics - Anfänger-Themen 4
B Animation mit Thread(s) Java Basics - Anfänger-Themen 23
I Thread.sleep (1000); Java Basics - Anfänger-Themen 1
M Threads Jede Klasse einem Thread zuweisen Java Basics - Anfänger-Themen 7
J Java Thread cancel() und wiederbeleben Java Basics - Anfänger-Themen 4
J BouncingBalls 1 Thread Java Basics - Anfänger-Themen 3
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
J Timer oder Thread programmieren ? Java Basics - Anfänger-Themen 10
fLooojava Laufender Thread | Boolean ändern Java Basics - Anfänger-Themen 9
T Thread Pool mit Work Stealing Java Basics - Anfänger-Themen 1
R Java Thread Java Basics - Anfänger-Themen 10
J Welche Methoden laufen im neuen thread ?? Java Basics - Anfänger-Themen 9
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
K Thread - Methoden in die run Methode Schreiben Java Basics - Anfänger-Themen 5
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
V Threads Exception in Thread behandeln Java Basics - Anfänger-Themen 3
S Methoden Multi-Thread und Methoden Objects. Java Basics - Anfänger-Themen 1
J Thread erstellen (BlueJ Projekt) Java Basics - Anfänger-Themen 3
P Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 1
F Threads Variable aus einem Thread in main Methode? Java Basics - Anfänger-Themen 9
K Exception in thread "main" Java Basics - Anfänger-Themen 7
L Thread-Frage Java Basics - Anfänger-Themen 2
E Was ist ein idle-thread? Java Basics - Anfänger-Themen 1
D Exception in thread "AWT-EventQueue-0" Java Basics - Anfänger-Themen 8
J Threads Prozess in Thread auslagern Java Basics - Anfänger-Themen 2
G Thread mehrmals starten und schliessen Java Basics - Anfänger-Themen 6
F Thread Koordination (Vorteile/Nachteile) Java Basics - Anfänger-Themen 0
O Thread aus dem Thread stoppen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben