Starten von Threads via JVM

DrLoad

Mitglied
Heyho,

ich habe eine technische Frage zu folgendem Code:

Java:
public class Foo implements Runnable{

	static Foo instance = new Foo();
	
	public Foo(){
		Thread runner = new Thread(this, "MyThread");
		runner.start();
	}
	
	@Override
	public void run() {
		while(true){			
			System.out.println("Thread Hello");
			try {
				Thread.sleep(800);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String a[]){
	}
}
Wenn ich das Programm ausführe, wird ja der Thread "MyThread" gestartet, während der Main-Thread sofort wieder beendet ist.
Gibt es bei einem solchen Konstrukt irgendwelche Besonderheiten zu beachten, die dazu führen könnten, dass der Thread "MyThread" beendet wird, während das restliche Programm ganz normal weiter läuft?
Das Problem ist nämlich, dass bei meinem etwas komplexeren Programm hin und wieder sowas passiert, jedoch laut Log keinerlei Exceptions geworfen werden, daher bin ich etwas ratlos, wie es passieren kann, dass dieser Thread auf einmal nicht mehr läuft.

Könnt ihr mir vielleicht eine Software empfehlen, mit der ich sowas gezielt monitoren kann und genau ein solches Vorkommnis loggen könnte? Benutze z.Zt den Yourkit Java Profiler werd nachher mal schauen, ob ich damit was aufspüren kann
 

Kr0e

Gesperrter Benutzer
Ouh, da bin ich mir nicht sicher. Ich hab mal die Erfahrung gemacht, dass Java keine Klassen initialisiert (Sprich auch keine statisches Elemente), solange keine andere Klasse drauf zugreift ... Wie gesagt, vlt. verwechsel ich grad was.
Wenn dein Thread ausgeführt wird, dann hab ichs verwechselt^^

Zu deiner Frage: Threads die setDaemon(false) ; sind, laufen unabhängig vom Hauptthread, der die Mainmethod aufruft.
Sprich main() wird aufgerufen und schließt sich sofort, und wenn der Thread dann gestartet werden sollte (Sofern das mit dem Statickram hinhaut) dann läuft der 800ms und geht dann auch aus und erst dann ist dein Programm komplett geschlossen!
 
T

Tomate_Salat

Gast
naja, du brauchst keine main, bekommst aber eine NoSuchMethod-Exception:
Java:
public class Test
{
	public Test()
	{
		System.out.println("hallo");
		
		final JFrame frame	= new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		SwingUtilities.invokeLater(new Runnable()
		{
			@Override
			public void run()
			{
				frame.setVisible(true);
			}
		});
	}
	
	static Test	t	= new Test();
}

und threads sind meines wissens nach generell als deamon gesetzt.

und
Java:
public class Test
{
	public Test()
	{
		Thread th	= new Thread()
		{
			@Override
			public void run()
			{
				int i	= 0;
				while(true)
				{
					try
					{
						System.out.println("Ich lebe seit: " + i + "ms");
						i += 100;
						
						Thread.sleep(100);
					} catch (InterruptedException e)
					{
						e.printStackTrace();
					}
				}
			}
		};
		
		th.start();
	}
	
	static Test t	= new Test();
	
	public static void main(String[] args)
	{
		
	}
}

rennt bei mir ohne sichtliches Ende durch :-/
 

DrLoad

Mitglied
Danke für die Antworten :) .
Jo, wenn ich davor "setDaemon(true)" calle, steigt der Thread mit aus (so wie es ja auch sein soll), ansonsten läuft der "theoretisch" bis zum St. Nimmerleinstag.

Die Frage ist jetzt aber, wie man einen solchen Thread von außen beeinflussen bzw. stoppen kann, wenn wie im obigen Beispiel keine Abbruchbedingung gegeben ist und keine Exceptions auftreten (wobei ich noch mal schauen müßte ob ich nicht irgendwo nen leeren catch-Block eingebaut/übersehen habe). Kann den ein anderer Thread so "mitreißen", dass er stirbt?

Und könnte man eine Abfrage einbauen, dass wenn der Thread nicht läuft, dass er neu gestartet wird?
edit: Der letzte Punkt hat sich erledigt, ob ein Thread läuft, krieg ich mit Thread.enumerate raus, fürs starten überleg ich mir noch was. ;)
 
Zuletzt bearbeitet:

musiKk

Top Contributor
Die Frage ist jetzt aber, wie man einen solchen Thread von außen beeinflussen bzw. stoppen kann, wenn wie im obigen Beispiel keine Abbruchbedingung gegeben ist und keine Exceptions auftreten

Gar nicht. Es gibt theoretisch die Möglichkeit mit [c]Thread#stop()[/c] einen Thread zu stoppen, aber das ist schon lange deprecated und es wird vehement davon abgeraten, dies einzusetzen. Du könntest ja mal versuchen, mit einem Debugger durch den Thread zu steppen oder an ein paar strategischen Stellen Ausgaben erzeugen. Dadurch lässt sich vielleicht eingrenzen, wie weit der Thread kommt.

Und könnte man eine Abfrage einbauen, dass wenn der Thread nicht läuft, dass er neu gestartet wird?
edit: Der letzte Punkt hat sich erledigt, ob ein Thread läuft, krieg ich mit Thread.enumerate raus, fürs starten überleg ich mir noch was. ;)

Beachte dabei, dass Du einen neuen Thread erzeugen musst. Ein Thread kann nur ein mal gestartet werden. Da Du den Thread aber eh auf Basis eines Runnable erzeugst, kannst Du dieses einfach wieder für den neuen verwenden (falls das in deiner Programmlogik in Ordnung ist).
 
T

Tomate_Salat

Gast
ja gut, man kann ihn schon bewusst stoppen mit tricks:

Java:
while(!isInterrupted()) {

aber wenn der gerade z.B. gerade auf einen Clienten warted, reicht das nicht aus. Da könnte man beispielsweise einen Clienten verbinden lassen, um den Thread weiterlaufen zu lassen etc...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Problem: Java-Klasse mit mehreren Threads als eigenen Prozess starten Allgemeine Java-Themen 3
P Threads Threads nicht gleichzeitig starten Allgemeine Java-Themen 3
G mehrere Threads starten/stoppen Allgemeine Java-Themen 4
K Starten eines Threads Allgemeine Java-Themen 13
J Threads mehrmals starten Allgemeine Java-Themen 18
B Benachrichtigung beim Starten von Threads Allgemeine Java-Themen 7
M Threads starten und im Hintergrund ablaufen lassen Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
E Java .exe Datei mit args starten Allgemeine Java-Themen 2
Lukas2904 Automatisches starten des Programms Allgemeine Java-Themen 5
N jar File auf Mac mit Doppelklick starten Allgemeine Java-Themen 5
O Jar lässt sich auf bestimmten Pc nicht starten Allgemeine Java-Themen 18
I Threads AudioInputStream separat starten und beenden; parallel programming Allgemeine Java-Themen 2
G Jar lässt sich mit macOS nicht starten Allgemeine Java-Themen 9
Tommy135 Input/Output Application aus Java package starten Allgemeine Java-Themen 2
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
ralfb1105 Classpath putty.exe aus JAR starten Allgemeine Java-Themen 37
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
F .jar erstellen und starten Allgemeine Java-Themen 15
E Mit Java ein Python Programm starten Allgemeine Java-Themen 20
D Compiler-Fehler Ich kann meinen Kompilierer nicht starten. Allgemeine Java-Themen 16
R probleme beim starten von jar unter linux Allgemeine Java-Themen 2
L Eclipse JavaFX Klasse starten programmatisch Allgemeine Java-Themen 1
V Endlosschleife mit Startbutton starten und Stopbutton stoppen Allgemeine Java-Themen 6
V JavaFX Fehler beim Starten einer Jar Allgemeine Java-Themen 7
A Javaagent auf WebApplication starten Allgemeine Java-Themen 0
B JAVA - mehrere Clienten gleichzeitig starten. Nicht bei Code! Allgemeine Java-Themen 3
T Starten vom Thread Allgemeine Java-Themen 3
A Linux: Native Library mit Rootrechten ohne Prozess mit sudo zu starten Allgemeine Java-Themen 1
Thallius Neuen Prozess starten, der auch nach Beedingung des Starter-Prozesses weiterläuft? Allgemeine Java-Themen 5
Maxim6394 Jar Dateien starten nicht Allgemeine Java-Themen 7
C Mit Pc Awendungen auf Server starten Allgemeine Java-Themen 8
M Eclipse Eine xhtml aus einem JSF Projekt starten Allgemeine Java-Themen 2
Developer_X Java Applets in Browser starten Allgemeine Java-Themen 9
N GOM-Database Program - wie starten Allgemeine Java-Themen 0
F Java Anwendung Remote starten geht nicht Allgemeine Java-Themen 0
F Spiel lässt sich nicht aus GUI starten Allgemeine Java-Themen 5
P Starten einer Java .jar-Datei Allgemeine Java-Themen 0
J jar Datei per Doppelklick starten Allgemeine Java-Themen 6
D neuen Prozess starten und anwendung beenden. Allgemeine Java-Themen 3
B Webbrowser mit Proxy- Verbindung starten Allgemeine Java-Themen 6
K Spiele starten nicht richtig Allgemeine Java-Themen 2
M Problem beim Starten der Anwendung Allgemeine Java-Themen 3
B Java GUI via SSH starten... Allgemeine Java-Themen 5
S VLC + Lied über Java starten Allgemeine Java-Themen 17
R Java-Progamm über Icon starten unter Windows Allgemeine Java-Themen 9
C Ubuntu-VM Java starten Allgemeine Java-Themen 24
A Programm will nicht starten... Allgemeine Java-Themen 7
Hoppelmann JAR mit Libaries und Natives vom Programm aus starten Allgemeine Java-Themen 5
V .jar nicht zweimal starten Allgemeine Java-Themen 4
C Java Programm über SSH starten Allgemeine Java-Themen 16
Jackii Java Programm aus anderen Java Programm starten Allgemeine Java-Themen 20
A Javaprogramm als Windowsservice starten Allgemeine Java-Themen 4
C Threads ExecutorService shutdown abbrechen und service "starten" ? Allgemeine Java-Themen 3
J Explorer über Code starten Allgemeine Java-Themen 15
G Java Programm aus Java Programm starten Allgemeine Java-Themen 6
X Neuerdings ein Problem mit dem Starten von Jars Allgemeine Java-Themen 5
C .jar bei Login starten Allgemeine Java-Themen 7
D Java Excel API - Schreiben in Excel lässt sich nicht über Makro starten Allgemeine Java-Themen 18
A Jars oder JNLPs aus java code in gleicher JVM starten Allgemeine Java-Themen 2
N Internet Explorer mit bestimter Java Runtime starten Allgemeine Java-Themen 2
K Programm mit verschiedenen Parametern starten Allgemeine Java-Themen 2
S Applet maximiert starten Allgemeine Java-Themen 5
T Externes Programm auf anderem Bildschirm starten Allgemeine Java-Themen 3
F Externes Programm starten, Speicheraufwändig Allgemeine Java-Themen 7
C Java Anwendung nur einmalig starten Allgemeine Java-Themen 10
Q Java aus Java starten Allgemeine Java-Themen 21
E Anwendung starten Allgemeine Java-Themen 3
E Programm von Main Methode starten Allgemeine Java-Themen 9
L AccessControlException beim starten aus einem Shellskript Allgemeine Java-Themen 3
J Java-Klasse über Konsole starten Allgemeine Java-Themen 6
T Java Programm aus anderem Java Programm starten Allgemeine Java-Themen 13
J Eclipse Java Programm aus anderem Java Programm starten Allgemeine Java-Themen 14
H Swing jar-Dateien starten nicht auf konventionellem Wege. Allgemeine Java-Themen 6
Y Anwendung starten(JAR) - Entscheidung Konsole oder Swing Allgemeine Java-Themen 5
K Prozess starten, überwachen und beenden Allgemeine Java-Themen 4
P Thread starten / stoppen / neustarten Allgemeine Java-Themen 8
T Javaprogramm unter Linux auf bestimmten Kern starten/laufen lassen ? Allgemeine Java-Themen 22
P Windows Media Player starten / finden Allgemeine Java-Themen 2
C Beste Möglichkeit eine jar mit großem Heapspace zu starten ? Allgemeine Java-Themen 8
C .jar unter Windows7 über den Explorer starten Allgemeine Java-Themen 6
M Java Programm als Dienst starten... Allgemeine Java-Themen 4
T doppeltes Starten verhindern Allgemeine Java-Themen 14
S Seperaten Thread starten Allgemeine Java-Themen 5
L Thread kurz unterbrechen und wieder starten Allgemeine Java-Themen 5
V Shellscript über ProcessBuilder starten Allgemeine Java-Themen 2
X Aus Java Applikation externes Programm starten Allgemeine Java-Themen 3
S Jar Datei mit mehr Speicher starten Allgemeine Java-Themen 2
L Jar File aus Quelltext heraus starten Allgemeine Java-Themen 9
M Java Klasse automatisch starten Allgemeine Java-Themen 3
E Zweites Java Programm sichtbar starten Allgemeine Java-Themen 4
C Name einlesen und Programm starten Allgemeine Java-Themen 2
B MVC: controller in unabhängigen thread von der view starten (gui friert ein) Allgemeine Java-Themen 5
L Externes Bash Script aus Java Datei heraus starten Allgemeine Java-Themen 2
V Java-Programm automatisch starten Allgemeine Java-Themen 2
M Jar starten per Doppelklick Allgemeine Java-Themen 4
$ Applikation(Left for Dead) mit Parametern Starten Allgemeine Java-Themen 5
V main(...) aus Klasse in PDF starten? Allgemeine Java-Themen 3
R Neuen Thread mit Verzoegerung starten..? Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben