Starten eines Threads

Kanitrino

Bekanntes Mitglied
Hallo Experten,

Ich habe das Gefühl, etwas Grundlegendes bzgl. Threads nicht verstanden zu haben. Ich möchte das an Hand von zwei Klassen erläutern :

Java:
import javax.swing.JApplet;

public abstract class AppletBasis extends JApplet implements Runnable 
{
	
	protected Thread running;
	protected static long msec;
	
	public abstract void run();
		
	public void starten()
	{	if (running == null);
		{	running = new Thread(this);
			running.start();
		}	
	}
	
	public void stop()
	{	running = null;
	}
	
	public void verzoegerung()
	{	try {Thread.sleep (msec);}
		catch(Exception e){}
	}
}
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;

public class AppletErbe extends AppletBasis
{
	private static final long serialVersionUID = 1L;
	JButton bStart;
	int a = 0;
	
	public void init()
	{		
		msec 	= 200;
		bStart = new JButton("START");
		bStart.addActionListener
		(new ActionListener()  // Start-Button
			{public void actionPerformed(ActionEvent e)
			{
				stop();
				starten();
			}}
		);
		
		setLayout(new BorderLayout());
		add("South", bStart);
	}
		
	public void run()
	{
		while(true)
		{
			a = (a+10)%360;
			repaint();	
			verzoegerung ();	
		}
	}
	
	public void paint(Graphics g)
	{
		g.setColor(Color.white);
		g.fillRect(50, 50, 100, 100);
		g.setColor(Color.pink);
		g.fillArc(50, 50, 100, 100, a, 60);
	}
	
}
Das Problem ist, dass jedesmal, wenn ich auf den Button klicke, die Animation schneller läuft.
Wie kommt das ? Habe ich vllt zu viele Threads rzeugt ? Aber ich stoppe den alten doch jedes Mal !
Kann mit jemand das erklären ?
 

diel2001

Bekanntes Mitglied
Wenn du einen Thread auf null setzt, ist er nicht automatisch beendet.
Es gibt eine Methode um einen Thread zu stoppen aber die Methode wurde depraced, da es nicht richtig funktioniert.
Du musst den Thread auslaufen lassen bzw. eine Abbruchbedingung einbauen.
 

illuminus

Mitglied
Hi,

füge deiner Endlosschleifenbedingung eine weitere Aussage hinzu.

while(true)
zu
while(true && doRun)

über die Bool "doRun" kannst du nu den Thread unterbrechen, setz dir dazu einfach eine Methode für doRun = false;

Gruß
 
G

Gast2

Gast
Java:
while(true && doRun)
=>
Java:
while(doRun)
das
Code:
true &&
kann man sich auch schenken ;)
 

Kanitrino

Bekanntes Mitglied
Danke sehr !

Wenn man aber einen Thread weder richtig starten noch stoppen kann - ist dann nicht das gesamte Thread-Getue völlig sinnlos ?!

Aber mal im Ernst :
Wenn ich schreibe
Java:
boolean laufen;

public void run()
{
   while (laufen)
  {
     tueDiesUndDas();
  }
}

public void laufe(boolean laufen)
{
    this.laufen = laufen;
}
Merkt "er" das denn, wenn laufen sich geändert hat ? Oder müsste man dann nicht eigentlich noch mal run() bzw. start() aufrufen?
 
Zuletzt bearbeitet:
G

Gast2

Gast
Wenn man aber einen Thread weder richtig starten noch stoppen kann - ist dann nicht das gesamte Thread-Getue völlig sinnlos ?!
Du kannst Threads richtig starten (Thread#start()) und auch richtig beenden (die run Methode auslaufen lassen). Das klappt eig. alles wunderbar ;)
 

diel2001

Bekanntes Mitglied
Ja warum soll er das nicht merkern, es ist doch eine Schleife er kommt doch immer wieder an die Stelle an der er den boolean "laufen" abfragt
 

Kanitrino

Bekanntes Mitglied
Wenn er in die Schleife gar nicht erst einsteigt, weil (zunächst) while(false) ist - wird dann die run()-Methode immer wieder abgefragt, ob nun inzwischen while(true) ist, auch wenn run() bereits abgearbeitet ist ?
 
Zuletzt bearbeitet:

Kanitrino

Bekanntes Mitglied
Das heisst, es nutzt garnichts, wenn in meinem in #6 dargestellten Programm laufen = true gesetzt wird. Ich müsste also schreiben
Java:
public void laufe(boolean laufen)
{
    this.laufen = laufen;
    start();
}
oder
Java:
public void laufe(boolean laufen)
{
    this.laufen = laufen;
    run();
}
... aber dann bin ich genau wieder da, wo ich nicht hin will, nämlich, dass ich -zig Threads gleichzeitig erzeuge, die mein Programm immer schneller laufen lassen !
 
S

SlaterB

Gast
von mehreren Threads hast du bisher noch nicht gesprochen, und machen die ein Programm nicht eher langsamer als schneller?
wo du wie warum welche Variable setzt wird glaube ich auch mit mehr Postings immer unklarer statt klarer

was aber allgemein zu hinweisen ist:
programmiere
Java:
while (not ende) {
   while(mache pause) {
      Thread.sleep(1000); // 1 sec warten
   }
   Aktion ausführen
}
hier kannst du einen Thread pausieren ohne ihn endgültig zu beenden,
du kannst ihn auch schon starken bevor er etwas machen soll (am Anfang Pause einschalten)

die Pause-Schleife ginge auch ohne Thread-sleep, nur würde dann pro Sekunde millionenmal die Bedingung geprüft,
CPU geht auf 100% Last, mit sleep() ist der Thread kaum eine Belastung im Pause-Modus
 

Kanitrino

Bekanntes Mitglied
von mehreren Threads hast du bisher noch nicht gesprochen, und machen die ein Programm nicht eher langsamer als schneller?
Das war eben die Frage aus meinem Eingangsbeitrag :
Das Problem ist, dass jedesmal, wenn ich auf den Button klicke, die Animation schneller läuft.
Wie kommt das ? Habe ich vllt zu viele Threads erzeugt ? Aber ich stoppe den alten doch jedes Mal !
Kann mit jemand das erklären ?
Sind wir überhaupt auf der richtigen Spur ?
 
S

SlaterB

Gast
ok, das hatte ich übersehen,
dass deine stop()-Methode aus dem ersten Post nichts stoppt wurde in der ersten Antwort gesagt,

dass dann mehrere Threads gleichzeitig
> a = (a+10)%360;
und ähnliches ausführen und die Animation schneller erscheinen lassen ist für mich nun verständlich

ansonsten sehe ich noch keine neuen Infos/ aktuellen Fragen,
und nein, möchte auch nicht alle Hinweise + bisherigen Änderungen einzeln nachverfolgen ;)

edit:
doch getan, also wieder bis zu
> Das heisst, es nutzt garnichts, wenn in meinem in #6 dargestellten Programm laufen = true gesetzt wird.

Antwort: doch, es reicht die Variable auf true/ oder false zu setzen, wenn sie in einer korrekten Schleife gut abgefragt wird,
nebenbei noch start() oder run() wäre unsinnig,
wenn du Probleme hast, dann stelle sie möglichst vollständig dar
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Chris81T Performance Problem durch mehrfaches Starten eines JAVA Prog Allgemeine Java-Themen 8
B Javaprogramme beim hochfahren eines PCs starten Allgemeine Java-Themen 2
C Probleme beim Starten eines Java-Programms Allgemeine Java-Themen 2
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
K Problem: Java-Klasse mit mehreren Threads als eigenen Prozess starten Allgemeine Java-Themen 3
Thallius Neuen Prozess starten, der auch nach Beedingung des Starter-Prozesses weiterläuft? Allgemeine Java-Themen 5
P Threads Threads nicht gleichzeitig starten Allgemeine Java-Themen 3
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
G mehrere Threads starten/stoppen Allgemeine Java-Themen 4
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
D Starten von Threads via JVM Allgemeine Java-Themen 7
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
J Threads mehrmals starten Allgemeine Java-Themen 18
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

Ähnliche Java Themen

Neue Themen


Oben