Threads Doppelte Threads beenden

ErikS

Mitglied
Hi,
ich lerne gerade Threads und habe was teils programmiert teils aus einem Buch.
Erstmal zum Programm
In einer GUI gibt es einen Start und einen Stop Button. (Nur das wichtigste als Code, GUI ist funktionsfähig)

Java:
public class GUIMain {
private GetInfo infoWorker;

       JButton btnStart = new JButton("Start");       
         infoWorker = GetInfo.StartPointerInfo(); //Start
     
        JButton btnStop = new JButton("Stop");
            infoWorker.StopPointerInfo(); //Stop

Die Klasse für den Thread

Java:
public class GetInfo implements Runnable {
    private final    Thread tn;
   
    private  GetInfo() {
        this.tn= new Thread(this);
        this.tn.start();
       
    }

    public static  GetInfo StartPointerInfo() {
        GetInfo info = new GetInfo();
       
        return info;   
    }
   
    public  void StopPointerInfo() {
        tn.interrupt();
    }

    @Override
    public void run() {
      
        while (! tn.isInterrupted() ) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                tn.interrupt();        
            }
         .
         .
         doSomething
        }
    }


So, jetzt wie ich denke dass es abläuft( Wahrscheinlich ist das falsch :( )

Bei drücken des Start Buttons wird die Variable infoWorker die vom Typ GetInfo (also der Klasse) ist belegt mit der Methode
Code:
StartPointerInfo()

Diese Methode benutzt die Methoden-internen Variable info um die Klasse GetInfo() aufzurufen.

info wird dann zurückgegeben (per return) an den Aufrufer (infoWorker), also IST infoWorker dann info?

Im Konstruktor der Klasse GetInfo() wird gesagt, dass dieser Global definierte Thread tn nun ein neuer Thread ist mir Verweis auf diese Klasse. Danach wird er gestartet.
Da er auf diese Klasse angesetzt wurde, sucht er hier die run() Methode.

Da über den Konstruktor der neue Thread tn gestartet wurde, ist dieser mit info verknüpft. info wird an infoWorker zurückgegeben, also kann man per infoWorker den aktuellen Thread beenden.



Wenn ich nun zweimal auf den StartButton drücke, läuft das ganze zweimal ab, der zweite Thread heißt genauso und bekommt die gleichen Variablen wie der erste.
Also ist der erste erzeugte Thread nicht mehr ansprechbar, man kann ihn nicht mehr beenden?


Danke für eure Hilfe​
 

truesoul

Top Contributor
Hallo

Java:
class ExampleThread implements Runnable {

        private boolean isRunnning = false;
        private Thread current;

        public void startThis() {
            isRunnning = true;
            current = new Thread(this);
            current.start();
        }

        public void stopThis() {
            isRunnning = false;
        }

        @Override
        public void run() {
            int i = 0;
            while (isRunnning) {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println(++i + " : " + this);
            }
        }
    }

Wenn man Exakt nur ein Thread laufen lassen möchte beendet man den anderen vorher.
Ansonsten speicher alle laufenden Threads in einem Array oder Liste.
 

eldrior

Aktives Mitglied
Hi
Zu den Threads: Ja, deine Annahme ist richtig. Wenn du ein zweites Mal auf den Start Knopf drückst, ist der vorherige Thread nicht mehr ansprechbar. Ich würde das an deiner Stelle vor dem Erstellen eines weiteren Threads prüfen, oder die Threads in einer dynamischen Datenstruktur speichern, sodass du weiterhin den Zugriff auf alle hast.

Zu deiner ersten Frage:
Wenn du wissen willst, wann welche Klasse welcher Variablen zugewiesen wurde, schreib eine "toString()" Methode für jede Klasse und lass das Programm durch den Debugger laufen, dann wird dir das angezeigt :)
 

ErikS

Mitglied
Das wichtigste für mich ist, ob meine Überlegung zu der Ablauffolge der Threads richtig ist. Wenn das stimmt kann ich darauf aufbauen und das nächste Problem angehen.

Wäre blöd wenn ich mir das falsch merke weil es halt irgendwie doch geht :eek:

@truesoul ich will den Thread weiterhin mit interrupt beenden und werde bei jedem drücken des Startknopfes überprüfen obs schon läuft und dann gar nicht erst den neuen Thread starten.
 

JStein52

Top Contributor
Deine Überlegung ist richtig und alles was dazu gepostet wurde ebenfalls. Nun musst du wissen was genau du willst (ein oder mehrere Threads) und dementsprechenden Code erstellen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
K Warum werden immer noch doppelte Zahlen ausgegeben ? Java Basics - Anfänger-Themen 13
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
D Doppelte For Schleife / Array Java Basics - Anfänger-Themen 3
C das Doppelte des Wertes in der Console ausgeben Java Basics - Anfänger-Themen 10
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
H Frage zur ermittlung eines doppelte Paars aus Sotieralgorithmus Java Basics - Anfänger-Themen 4
N Best Practice Doppelte und einfach Anführungsstriche in Runtime.getruntime().exec() Java Basics - Anfänger-Themen 6
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
L Doppelte Schleife Anpassen Java Basics - Anfänger-Themen 5
W Map doppelte Values löschen Java Basics - Anfänger-Themen 3
S CSV auf doppelte Einträge überprüfen Java Basics - Anfänger-Themen 8
S Doppelte Liste Einfügen Java Basics - Anfänger-Themen 1
M Argument in Integer verwandeln und das Doppelte davon printen Java Basics - Anfänger-Themen 9
T Klassen Doppelte Elemente aus Container entfernen Java Basics - Anfänger-Themen 6
M Erste Schritte Doppelte Ausgabe? (JList) Java Basics - Anfänger-Themen 1
kilopack15 Array auf doppelte Elemente überprüfen Java Basics - Anfänger-Themen 16
S Input/Output Doppelte Input-Abfrage Java Basics - Anfänger-Themen 3
K Input/Output Doppelte Ausgabe Java Basics - Anfänger-Themen 5
S Erste Schritte Doppelte Ausführung? Java Basics - Anfänger-Themen 4
J Variablen Doppelte Werte in Int Array Java Basics - Anfänger-Themen 10
D Java doppelte Zahlen auch über 10 in einem String entfernen Java Basics - Anfänger-Themen 2
D Java doppelte Zahl/Zeichen in einem String entfernen Java Basics - Anfänger-Themen 6
S ArrayList Gruppieren, "Doppelte Werte" Addieren Java Basics - Anfänger-Themen 5
O Doppelte For-Scheife Java Basics - Anfänger-Themen 6
E Array doppelte Einträge Java Basics - Anfänger-Themen 2
S Variablen Array in ArrayList auf doppelte Einträge überprüfen Java Basics - Anfänger-Themen 4
M Einfache und Doppelte Operatoren Java Basics - Anfänger-Themen 3
P Doppelte Datensätze aus CSV-Datei löschen Java Basics - Anfänger-Themen 17
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
P Doppelte Einträge in eine List Java Basics - Anfänger-Themen 5
S Array befüllen & auf doppelte werte prüfen Java Basics - Anfänger-Themen 6
B Klassen Doppelte werte Filtern XML, Datenbank und DOM Java Basics - Anfänger-Themen 3
R Doppelte löschen Java Basics - Anfänger-Themen 6
C Doppelte Einträge aus String [] Array entfernen. Java Basics - Anfänger-Themen 5
K Doppelte namen bei random Java Basics - Anfänger-Themen 3
U Doppelte Interfcae Implementierung Java Basics - Anfänger-Themen 10
M doppelte Einträge Emailempfänger... Java Basics - Anfänger-Themen 35
G txt-File als DB>doppelte Einträge verhindern/Suche/... Java Basics - Anfänger-Themen 10
DerGroßeNargus Doppelte Liste initialisieren Java Basics - Anfänger-Themen 2
H Datentypen Doppelte Verkette Liste - Verständnissproblem Java Basics - Anfänger-Themen 5
T Doppelte Liste Java Basics - Anfänger-Themen 8
R Schleife Doppelte Daten löschen Java Basics - Anfänger-Themen 3
V Doppelte Zahl suchen Java Basics - Anfänger-Themen 14
L Hilfe, doppelte Zufallszahlen Java Basics - Anfänger-Themen 13
G List suchen und doppelte rausfiltern Java Basics - Anfänger-Themen 3
T Doppelte Anführungszeichen ersetzen?? Java Basics - Anfänger-Themen 4
Luk10 Doppelte for-schleife Java Basics - Anfänger-Themen 7
P Doppelte Einträge in mehreren Textfiles finden und ausgeben Java Basics - Anfänger-Themen 8
T Array: Doppelte Charakteren löschen - Ein Lösungsversuch Java Basics - Anfänger-Themen 37
P doppelte Werte im Array ausgeben. Java Basics - Anfänger-Themen 4
J doppelte Einträge in einem Array Java Basics - Anfänger-Themen 7
M Aufgabe: Array auf doppelte Zahl prüfen Java Basics - Anfänger-Themen 8
-horn- Doppelte Einträge entfernen, aus Array, List oder sonstwas Java Basics - Anfänger-Themen 9
G _NUR_ doppelte Einträge in einem Array behalten Java Basics - Anfänger-Themen 3
J Doppelte Integer aus einem Array entfernen - seltsames Prob. Java Basics - Anfänger-Themen 5
G doppelte Einträge im String Array löschen Java Basics - Anfänger-Themen 21
C Doppelte Punktnotation Java Basics - Anfänger-Themen 2
0 ArrayList - doppelte Einträge entfernen? Java Basics - Anfänger-Themen 9
S Methode, um doppelte Einträge in Array zu finden Java Basics - Anfänger-Themen 5
F doppelte Elemente in HashSet Java Basics - Anfänger-Themen 5
G java.util.LinkedList: Doppelte Elemente vermeiden Java Basics - Anfänger-Themen 5
G Wie doppelte Einträge in ComboBox vermeiden ? Java Basics - Anfänger-Themen 9
M Doppelte Einträge in einer datei löschen(nach timestamp)! Java Basics - Anfänger-Themen 4
D Doppelte Einträge einer Liste löschen Java Basics - Anfänger-Themen 6
B 2 ELists vergleichen und doppelte Einträge löschen Java Basics - Anfänger-Themen 11
S "doppelte" if-Anweisung Java Basics - Anfänger-Themen 10
G Doppelte (Paar) Werte in einem Vektor finden Java Basics - Anfänger-Themen 6
F Doppelte Datensätze zusammenziehen Java Basics - Anfänger-Themen 2
V Doppelte Zahlen bei Lotto verhindern Java Basics - Anfänger-Themen 11
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
C Threads und Swing Java Basics - Anfänger-Themen 9
berserkerdq2 Wo finde ich in der Java Api die Notation zu Threads bezüglich Synchronized? Java Basics - Anfänger-Themen 14
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
B Monitor als Schranke von Threads Java Basics - Anfänger-Themen 20
W Threads Alphabet Java Basics - Anfänger-Themen 20
H Threads Anfänger Java Basics - Anfänger-Themen 17
1 Threads parallel laufen Java Basics - Anfänger-Themen 11
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
M Threads Java Basics - Anfänger-Themen 12
L Threads Synchronisierung zwischen threads Java Basics - Anfänger-Themen 4
M Threads Java Basics - Anfänger-Themen 2
A Threads Java Basics - Anfänger-Themen 9
A Threads Java Basics - Anfänger-Themen 13
A Threads und .join Java Basics - Anfänger-Themen 14
W Threads starten Java Basics - Anfänger-Themen 2
J Wieviele threads? Java Basics - Anfänger-Themen 9
J Problem bei seriellem Start von Threads Java Basics - Anfänger-Themen 11
O Threads Java Basics - Anfänger-Themen 2
L Buchungssystem und Threads Java Basics - Anfänger-Themen 2
O Threads - Synchronize(), join(), wait(), notify(), yield() Java Basics - Anfänger-Themen 6
L Klassen NFC Reader und JavaFx Problem -> threads? Java Basics - Anfänger-Themen 2
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
S Gemeinsame Ressource und Mehrfachinstanziierung von Threads Java Basics - Anfänger-Themen 16
S Verklemmung Threads Java Basics - Anfänger-Themen 11
B Threads 2 Threads gleichzeitig laufen lassen Java Basics - Anfänger-Themen 1
M Threads Threads laufen sequenziell, statt gleichzeitig. Java Basics - Anfänger-Themen 9
M Threads run Methode Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben