Ich versuche grade das Handling von JAVA Threads zu verstehen, nur leider verschliesst es sich mir, wie ich nun zum beispiel einen thread starte, welchem ich nun zum beispiel den ersten wert eines arrays und dann den zweiten übergebe (könnte man eventuell auch über einen entsprechenden konstruktor so lösen, dass einmal 2 werte übergeben werden). dieser erste thread soll nun den grösseren wert an einen weiteren thread übergeben und dieser soll so lange warten, bis der erste thread, welcher nun den ersten und dritten wert des array vergleicht und wieder den grösseren an den zweiten weitergibt, diesen an den zweiten gegeben hat, welcher nun im weiteren wie der erste thread verfährt und den grösseren der beiden werte an den dritten weitergibt, so dass am ende eine ausgabe der in den threads liegenden werte ein sortiertes anfangsarray in aufsteigender reihenfolge vorliegen sollte!?
Das Problem ist nur:
Wie merken sich die einzelnen threads, dass sie schon einen Wert haben und wie soll die ganze programmstruktur denn nun aussehen!?
Weiss da jemand rat?
vielleicht mit einem beispiel
Hallo,
eine Möglickeit ist es die Thread zu starten und über Pipes zu verbinden. Dann sendet der erste Thread über eine Pipe etwas na den zweiten Thread der darauf wartet das er daten bekommt. Eine Sorteierung ist damit ab nicht so einfach dafür gibt es sowas wie Arrays.sort(array);
Thomas
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Das Problem ist nur:
Wie merken sich die einzelnen threads, dass sie schon einen
Wert haben und wie soll die ganze programmstruktur denn nun
aussehen!?
Threads werden als Klassen implementiert, einen Wert mit dem der Thread arbeiten soll kannst du z. B. in dieser Klasse als Member abspeichern, oder auch einfach in der run()-Methode der Thread-Klasse deklarieren.
Datenaustausch zwischen Threads kannst du auch über Referenzen auf Klassen und Zugriff auf deren Member realisieren.
Die Synchronisierung funktioniert über Warteschlangen. Jedes Objekt hat eine Warteschlange. Um ein bestimmtes Objekt für die Warteschlange zu verwenden brauchst du eine synchronized-Sektion:
synchronized( this )
{
this.wait();
}
Beim wait()-Aufruf wartet der Thread dann. Um den Thread weiterlaufen zu lassen kannst du über einen anderen Thread die notify()-Methode aufrufen:
synchronized( otherObject )
{
otherObject.notify();
}
Damit kann ein Thread einem anderen signalisieren, dass er jetzt weiterarbeiten kann.
Grüße, Robert