Threadproblem

eagle1985

Mitglied
Hallo zusammen,

ich habe ein Problems mit Threads.

Ich würde gerne folgendes Problem beseitigen:

Es existieren zwei Threads, Thread A und der Main Thread

Java:
public class ThreadA extends Thread
{
  public void run()
  {
    while(true)
    {
      // Nix, damit Thread nicht abstirbt
    }
  }

  public void methode1()
  {
    // inhalt Methode 1
  }
}

nun instanziere ich den Thread aus dem Main-Thread heraus, erledigen andere Dinge und möchte zu einem späteren Zeitpunkt die Methode1 aus ThreadA in dessen Thread aufrufen.

Java:
...
ThreadA thread = new ThreadA();
thread.run(); // --> ergiebt Thread-Prozess A
... // erledigen andere dinge

thread.methode1();  // Dies sollte nun auch im Prozess-Thread A ablaufen

// klappt nicht
thread.interrupt();
thread.methode1;
 

eRaaaa

Top Contributor
Ähm..[c]thread.run();[/c] damit rufst du zwar die run-Methode auf, aber nicht nebenläufig ^^ Starte den Thread mit thread.start() ...dann wird automatisch die run aufgerufen und zwar auch als Thread :)

(allerdings hab ich den Rest was du versuchst nicht verstanden ^^^)
 

eagle1985

Mitglied
danke für die rasche Antwort.

damit wird die RunMethode in einem eigenen Thread ausgeführt :)

Dass eigentliche Problem ist damit jedoch noch nicht behoben.

Was ich will ist, dass wenn ich aus Main Thread die methode1 des ThreadA aufrufe, diese im selben Thread wie die Run-Methode des ThreadA laufen sollte.

Das Problem hab ich desegen, weil ich ein paar DLL-Files mit JNI in Java Eingebunden habe.
Die Objekte welche durch das JNI enstehen sind nur in dem Erzeugungs-Thread gültig. Sobald ein anderer Thread auf das Objekt zugreiffen will, wird vom JNI aus eine Exception geworfen.

Heisst ich muss irgendwie sicherstellen können, dass ich von überall her (Main-Thread, AWT-Event-Thread, ...) in meinen eigenen Thread wechseln kann, damit die methode welche auf das Objekt zugreift, im selben Thread bleibt

hoffe dass ist besser verständlich
 

Michael...

Top Contributor
Eine Methode wird immer in dem Thread ausgeführt, in dem sie aufgerufen wird. Man kann höchsten in einen Marker setzen, den der zweite Thread kennt und dann selbst die gewünschte Methode aufruft.
 
S

SlaterB

Gast
doppelt hält besser:
übergib an den fraglichen Thread ein Runnable-Objekt, in dem der Aufruf steht oder programmiere dort eine entsprechende Methode und aktiviere die nur durch das Setzen eines boolean-Flags,

in jedem Fall muss der fragliche Thread selbstständig darauf achten, ob in seinem Datenbereich (z.B. Klassenattribute des Thread-Objektes) das boolean-Flag oder das Runnable-Objekt gesetzt ist und dann aus eigenen Antrieb heraus die nötige Aktion starten
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Monokuma Threadproblem mit Sockets und Server Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben