Threads Einen Thread sich selbst schließen lassen

Tausendsassa

Tausendsassa

Aktives Mitglied
Hallo,
ist es möglich dass ein Thread sich selbst beendet sobald eine Bedingung eingetroffen ist?
Danke
Tausendsassa
 
Zuletzt bearbeitet:
Flown

Flown

Administrator
Mitarbeiter
Kommt auf deinen Code drauf an. Wer solche Fragen stellt, muss mit solchen Antworten rechnen. Je präziser deine Frage, desto genauer die Antwort.
 
Tausendsassa

Tausendsassa

Aktives Mitglied
meinst du ich sollte Code posten oder nur die genauen Umstände erklären?
 
Tausendsassa

Tausendsassa

Aktives Mitglied
Thread aufruf:
Java:
Thread t1 = new Thread(new EnemyFight());
private boolean first = true;
private void onDamageEnemy(java.awt.event.ActionEvent evt)                       
    {                           
        if(first == true)
        {
            first = false;
            t1.start();
        }
    }

Code im Thread:
Java:
    @Override
    public void run()
    {
        while(aktuelleHP > 0)
        {
            if(aktuelleHP <= 0)
            {
                  // Thread hier schließen
            }
        }
    }

Code wurde stark vereinfacht und dient nur zur Veranschaulichung der Lage.
 
Flown

Flown

Administrator
Mitarbeiter
Kannst du auch die Situation erklären?

Also so wie du das jetzt geschildert hast, bricht der Thread so und so ab, weil die run-Methode aus ist, falls hp unter 0 fällt.
 
Tausendsassa

Tausendsassa

Aktives Mitglied
Naja das sollte auch der Fall sein ich möchte nur verhindern dass ich eine Methode die den Thread schließen kann extra aus der Thread rufenden Klasse aufgerufen werden muss, da ich dazu ein Objekt der Klasse erstellen muss und dann eben der Konstruktor ausgeführt wird was verhindert werden soll.

Sorry für die komplizierte Ausdrucksweise :p
 
Tausendsassa

Tausendsassa

Aktives Mitglied
Code:
if(hp <= null)
{
}

das ist die Abbruchbedingung ich brauche nur ne neue Möglichkeit den Thread zu schließen
 
Flown

Flown

Administrator
Mitarbeiter
Wie meinst du das? Du willst was bestimmtes schließen, aber du möchtest es nicht kennen?
 
Tausendsassa

Tausendsassa

Aktives Mitglied
stell dir das so vor ich habe eine klasse mit einem Button den ich zum kämpfen (es ist ein spiel :p) drücken kann und beim ersten druck soll ein Thread gestartet werden der meinen Gegner simuliert und alle 3 Sekunden "zuschlägt". Nun will ich aber sobald er mich besiegt hat oder umgekehrt, dass der Thread gestoppt wird bzw nicht mehr speicher und co verbraucht da mein Programm eh schon langsam ist... und ich versuche das zu schaffen ohne ein Objekt der rufenden Klasse erstellen zu müssen, weshalb es toll wäre wenn ein Thread einfach sagen kann "jetzt beende ich mich"...
 
Flown

Flown

Administrator
Mitarbeiter
Nachdem du immer 3 Sekunden warten musst, hast du sicher irgendwo ein Thread.sleep eingebaut oder nicht?
 
Flown

Flown

Administrator
Mitarbeiter
Ahja da gibt es so viele Möglichkeiten wie du das anstellen könntest.
Ansatz 1:
Du übergibst dein Spielerobjekt deinem Thread und kannst auch prüfen, ob dieser auf 0 sinkt.
Java:
class MyRunnable implements Runnable {
  private Player player;
  
  public MyRunnable(Player player) {
    this.player = player;
  }
  @Override
  public void run() {
    while(player.hp > 0 && enemy.hp > 0) {
      ...
    }
  }
}

Ansatz 2:
Du hast dein Thread Objekt, vielleicht bekommst du ja von irgendwo ein ActionEvent her und kannst in dan interrupten (also einen Thread höflich beenden - findest du viele Tutorials im Inet).
Java:
@Override
public void run() {
  try {
    while(...) {
      ...
    }
  } catch(InterruptedException e) {    
    Thread.currentThread().interrupt();
  }
}
und außerhalb eben:
Java:
public void deadAction(ActionEvent e) {
  t1.interrupt();
}

Und noch viele mehr. Vielleicht passt ja ein Ansatz für dich.
 
Tausendsassa

Tausendsassa

Aktives Mitglied
ok also Ansatz 1 kling sehr viel versprechend nur ich bin noch nicht ganz so fortgeschritten weshalb ich mir nicht sicher bin wie genau ich das auf meinen Fall ummünzen kann. Es ist so, dass ich ein Frame habe, dass die GUI für den Kampf beinhaltet und gleichzeitig auch des Spielers Aktionen durchführt das heißt kämpfen. Aber ich habe jetzt auch den thread der eigentlich genau das selbe tut wie der Spieler. nun bin ich auch nicht ganz sicher was mit
Java:
private Player player;
bezweckt werden soll, da ich kein solches Objekt erzeugen kann...
 
Tausendsassa

Tausendsassa

Aktives Mitglied
beim Ansatz 2 ist das try catch für das Thread.sleep()? weil dann verstehe ich nicht warum der Thread beendet werden sollte wenn der Thread.sleep() nicht funktioniert.
 
Flown

Flown

Administrator
Mitarbeiter
Naja der zweite Ansatz ist ein wenig dirty muss ich zugeben.

Hier mal wie das konzeptionell funktionieren könnte:
Java:
public class Test {

   public static void main(String...args) {
     // Methode 1
     Thread t = new Thread(new MyRunnable1(new Player()));
     t.start();

     // Methode 2
     t = new Thread(new MyRunnable2());
     t.start();
     try {
       Thread.sleep(2000);
     } catch (InterruptedException e) {
       e.printStackTrace();
     }
     t.interrupt();
   }
}

class Player {
   int hp = 100;

   public void punch() {
     hp -= 50;
   }
}

class MyRunnable1 implements Runnable {
   private Player p;

   public MyRunnable1(Player p) {
     this.p = p;
   }

   @Override
   public void run() {
     while (p.hp > 0) {
       System.out.println("Time to punch player: " + p.hp);
       p.punch();
     }
     System.out.println("Ended");
   }
}

class MyRunnable2 implements Runnable {
   private int i = 100;

   @Override
   public void run() {
     try {
       while (i > 0) {
         System.out.println("Running: " + i);
         i--;
         Thread.sleep(100);
       }
     } catch (InterruptedException e) {
       Thread.currentThread().interrupt();
     }
     System.out.println("Ended");
   }
}
 
D

DrLuzienSanchez

Mitglied
Bei diesem Try Catch um das Sleep soll nicht ein missglücktes Schlafen absichern. Damit hast du die möglichkeit einen dösenden Thread wieder zu wecken.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Einen Thread in einer Schleife Allgemeine Java-Themen 2
M Nanosekunden-Pause innerhalb einen Thread-Loops Allgemeine Java-Themen 3
J Wie erschaffe ich einen sicheren Datenaustausch zwischen Thread und Nicht-Threads Allgemeine Java-Themen 8
Z Threads Thread für einen Client Allgemeine Java-Themen 9
C Argument an einen Thread übergeben Allgemeine Java-Themen 4
H SwingWorker statt Thread für einen Server Allgemeine Java-Themen 2
G einen Thread beim Schlafen überraschen und abschießen Allgemeine Java-Themen 3
P eigener Thread für einen JButton Allgemeine Java-Themen 32
T Wie kann man nur einen Thread starten Allgemeine Java-Themen 16
A Einen Thread von einem anderen aus anhalten? Allgemeine Java-Themen 11
J Wie stoppe ich einen Thread richtig? Allgemeine Java-Themen 21
M Kann ich einen thread zwei mal starten ? Allgemeine Java-Themen 3
Zrebna FileUtils.cleanDirectory() - aber einen sub-Ordner "verschonen" Allgemeine Java-Themen 1
M Datei verschieben hat einen Fehler?? Allgemeine Java-Themen 20
L Generator für einen Parser implementieren Allgemeine Java-Themen 13
W Haben Konstruktoren in Java eigentlich immer mindestens einen Parameter? Allgemeine Java-Themen 4
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
A Mithilfe von einer Nummer einen Namen finden n-Beziehung Allgemeine Java-Themen 8
B Long in einen Double umwandeln und im Label anzeigen Allgemeine Java-Themen 7
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
MoxxiManagarm Ich brauche einen smarten Ansatz Allgemeine Java-Themen 23
J Gebautes Jar per Maven in einen Docker Container kopieren Allgemeine Java-Themen 0
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
L File beim Kopieren in einen anderen Ordner umbenennen Allgemeine Java-Themen 6
E Einen Bot Programmieren. Allgemeine Java-Themen 6
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
P [Webdriver] einen Datensatz signieren Allgemeine Java-Themen 0
R MAC-Adresse eindeutig für einen PC ? Bezug zu Netzwerk, wieso ? Allgemeine Java-Themen 7
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
N Wie öffne ich einen runtergeladadenen Code in IntelliJ Allgemeine Java-Themen 3
R Wie einen ClientBuilder / JarBuilder programmieren? Allgemeine Java-Themen 14
S Input/Output Beste Möglichkeit einen String in einen Datei zu Schreiben Allgemeine Java-Themen 2
L Input/Output Wie kann man in der Konsole einen Text farbig ausgeben z.b in grün Allgemeine Java-Themen 6
L Wie programmiert man einen Listener? Allgemeine Java-Themen 1
Thallius Wie convertiere ich einen pkcs8 key in einen java lesbaren? Allgemeine Java-Themen 16
M Was braucht man, um einen Java Job zu bekommen? Allgemeine Java-Themen 8
G Substrings in einen String zusammenfassen Allgemeine Java-Themen 5
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
N Compiler-Fehler Warum erhalte ich einen Nullpointer Fehler? Allgemeine Java-Themen 2
P Zum src Ordner einen Projektes navigieren Allgemeine Java-Themen 8
J Abhängigkeit zwischen Rechenzeit und Speicherbedarf in einen Algorithmus Allgemeine Java-Themen 7
MaxG. Swing Wie kann man einen Dateiordner auswählen ? Allgemeine Java-Themen 3
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
KeVoZ_ int Werte in einen String fassen Allgemeine Java-Themen 4
RalleYTN Problem bei Schleife die durch einen 2D raum iterieren soll Allgemeine Java-Themen 1
S Einen Punkt um den Ursprung drehen Allgemeine Java-Themen 5
M Genaues Bugtracking - jemand einen Vorschlag? Allgemeine Java-Themen 14
L Gibt es in Java einen Property Editor? Allgemeine Java-Themen 2
S Einen übergebenen String kopieren Allgemeine Java-Themen 3
L Wie kann ich einen Keystore aus existierenden Zertifikaten erstellen? Allgemeine Java-Themen 1
P Vectorelemente in einen anderen Vector kopieren Allgemeine Java-Themen 12
U in java an einen Rückgabewert aus matlab rankommen Allgemeine Java-Themen 2
B einen color-chooser bauen, ähnliche Farben vermeiden Allgemeine Java-Themen 5
B .txt Datei in einen kompletten String konvertieren Allgemeine Java-Themen 20
H Gibt es einen großen Unterschied zwischen Java 6 und Java 7? Allgemeine Java-Themen 3
M String in einen 2D array bringen Allgemeine Java-Themen 2
Y Prüfen ob ein Graph immer einen von mehren Enden erreicht Allgemeine Java-Themen 4
J (Java3D) Einen Faden programmieren - Logikproblem Allgemeine Java-Themen 5
Y Applet/Html - Wie Java-Methode aufrufen, die einen Parameter erwartet? Allgemeine Java-Themen 3
Rudolf In wie fern lohnt sich C++ für einen Javaentwickler Allgemeine Java-Themen 70
A Welches Speichermanagement für einen Kalkulator Allgemeine Java-Themen 7
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
J String-Typ in einen generischen Typ T umwandeln Allgemeine Java-Themen 6
S RandomAcessFile das einen InputStream wrappt..? Allgemeine Java-Themen 2
H Scanner soll einen Inputredirect einlesen, liest aber nicht jedes Wort ein. Allgemeine Java-Themen 3
H Wie erzeugt man einen Daemon? Allgemeine Java-Themen 7
S Wie beendet man einen Process in Java Platform unabhänging? Allgemeine Java-Themen 8
A nur einen Wert aus einer .conf lesen und erneuern Allgemeine Java-Themen 3
S MANIFEST DATEI hat nur einen Eintrag Allgemeine Java-Themen 14
M Einen Prozess "crashen" lassen Allgemeine Java-Themen 9
I getResponseCode(); returnt einen falschen Wert? Allgemeine Java-Themen 7
U Wie kann mit einen Java Applet Dateien erstellen,verschieben und löschen? Allgemeine Java-Themen 9
A Framework für einen Web Service Allgemeine Java-Themen 6
I %AppData% Variable für einen Prozess setzen Allgemeine Java-Themen 23
V Gibt es einen Variablen Cast? Allgemeine Java-Themen 8
S regex für einen Link Allgemeine Java-Themen 3
M Client für einen Webservice erstellen (ONVIF) Allgemeine Java-Themen 3
T Undwandlung eines String in einen InputStream? Allgemeine Java-Themen 3
M Selbst geschriebener InputStreamReader über einen beliebigen InputStream Allgemeine Java-Themen 4
P Datei in einen String lesen Probleme bei Codierung Allgemeine Java-Themen 2
A Variable Parameterinhalte an einen Query übergeben? Allgemeine Java-Themen 3
M einen Tag addieren Allgemeine Java-Themen 11
T In der JVM einen weiteren, unabhängigen Prozess starten Allgemeine Java-Themen 11
Schandro Datei öffnen mit... Bestimmten Dateityp mit einen Java-Programm öffnen lassen Allgemeine Java-Themen 5
B Gibt es einen Unterschied zwischen Java 1.2 und Java 2? Allgemeine Java-Themen 7
T Wie kann ich einen doppelstart vermeiden? Allgemeine Java-Themen 9
G Teilstring in einen String einfügen Allgemeine Java-Themen 5
X Software soll einen Text vorlesen! Allgemeine Java-Themen 5
M "Unzulässiger Zugriff auf einen Speicherbereich" Allgemeine Java-Themen 7
N Variablen eines Objektes (instanz) in einen Array lesen Allgemeine Java-Themen 7
E hex- Stirng in einen float umwandeln Allgemeine Java-Themen 9
E ein \ in einen String schreiben Allgemeine Java-Themen 3
S Einen Ordner zurück von der JarDatei Allgemeine Java-Themen 6
E Gibt es so etwas wie einen Windows Listener? Allgemeine Java-Themen 6
J Name eines Strings durch einen String festlegbar? Allgemeine Java-Themen 2
P Array in einen String Allgemeine Java-Themen 2
K Java einen Port überwachen lassen Allgemeine Java-Themen 5
M Brauche einen Tipp, bei einer Aufgabe ! Allgemeine Java-Themen 3

Ähnliche Java Themen

Anzeige

Neue Themen


Oben