aus mehreren Programmen ein Programm mit Threads machen

Status
Nicht offen für weitere Antworten.
F

Fritz

Gast
hallo,

ich habe eine verteilte Anwendung geschrieben, bei dem ursprünglich jedes Programm in einer eigenen JVM gestartet werden sollte. Weil das aber zum Testen recht aufwendig ist, jedes mal das gleiche Programm mehrere Male zu starten, wollte ich diese Programme nun in Threads packen (In jedem einzelnen Programm kommen sonst keine Threads vor). Urspünglich habe wurde das einzelene Programm wie folgt gestartet:

Code:
public static void main(String[] args) {
        //Start 
        Init calc=new Init();
        calc.Go();   
}

Um nun alles in einem Programm laufen zu lassen, habe ich einfach die Klasse Init() als Runable versehen und in die run()-Methode nur die Methode Go() reingepackt, also:


Code:
public class Init extends CalcChange implements Runnable{
     public void run() {
        this.Go()
    }

Nun will ich das ganze so starten in main():


Code:
Thread t2 = new Thread(new Init()); 

     

        for (int i = 1; i < 5; i++) {
            new Thread(t2).start();
        }

Es funktioniert grundsätzlich auch, nur werden Variablen usw. überschrieben. Es wird auch sehr viel mit Vererbung gearbeitet. Meine Frage: Gibt es einen einfachen Weg, das Ganze in Threads zu packen, ohne das Programm wesentlich zu ändern. Es sollen einfach 5 eigene Programme laufen, ähnlich einem fork in C. Synchrinsation ist auch nicht nötig. Kann jmd helfen?

Danke
 

Marco13

Top Contributor
Wenn ich mich nicht sehr täusche, dann sind die einzigen Variablen, die da überschrieben werden können, statische Variablen, und wer die verwendet, um Zustände zu speichern, ist selbst schuld (->Mach' sie nicht-static).
Andernfalls müßtest du das Problem genauer beschreiben.
 

Wolfram

Mitglied
Hi,

eine besondere Eigenschaft von Threads ist, dass sie miteinander den gleichen Speicherraum teilen (Heap), wogegen Prozesse einen eigenen Speicherraum erhalten, spätestens wenn das erste Mal schreibend darauf zugegriffen wird ("copy on write"). Es ist also kein Wunder, dass die Threads in der Lage sind, sich gegenseitig "Variablen" zu überschreiben. Neben den mit static markierten Variablen, die im Heap gespeichert werden, werden auch alle mit new angelegten Objekte dort gespeichert, aber damit die gegenseitig überschrieben werden können, wird natürlich eine Referenz auf das Objekt benötigt.

Was Du eigentlich haben möchtest, ist ein fork(), aber das ist die UNIX-spezifische Methode der Prozess-Erzeugung. Am nächsten dran scheint java.lang.Runtime.exec(String), das einen neuen Prozess erzeugt. Runtime.exec() entspricht am ehesten pipe(), und ist nicht das, was Du haben willst. Runtime.exec() ruft eigentlich nur ein externes Programm auf. Es ist wahrscheinlich am einfachsten, wenn Du Dir ein Shellskript/eine Batchdatei schreibst, das/die das Programm x-mal für Dich startet.

Im übrigen gilt natürlich das, was Marco13 gesagt hat, aber ich gehe mal davon aus, dass es zu spät ist, Dein Programm "mal eben" threadsicher zu machen ... kannst ja mal drauf hin arbeiten ;)
 

Marco13

Top Contributor
Nun, wenn es keine statischen Variablen gibt, dann sind die Objekte, die dort mit
Init calc=new Init();
ja bildlich gesprochen "die Wurzeln von Bäumen" ("Objekthierarchien"). Wenn jedes "Init"-Objekt ein Field
Code:
class Init
{
    Data someData = new Data();
}
enthält, liegen dieses "Data"-objekte zwar alle im gleichen Speicher, und es sind auch immer die gleichen Objekte, aber es sind eben nicht dieselben. Überschrieben werden kann dort nichts. Wenn man sich aber das Leben leicht machen wollte, und sowas geschrieben hat wie
Code:
class Init
{
    public static Data someData = new Data();
}
"weil das so praktisch ist, weil man da so leicht von überall drauf zugreifen kann", dann ist das natürlich immer ein- und dasselbe Objekt, und dann kracht's...
 
F

Fritz

Gast
Hallo,

vielen Dank für die Antworten. Es war nur eine Var. static und nachdem das geändert wurde, lief es auch nicht.

Es handelt sich um eine Client/Server Applikation. Statt viele Clients zu starten, sollen alle in ein Programm gebracht werden, bei dem jeder Client einen Thread darstellt. Selbstverständlich haben dann auch alle Variablen eigene Werte.

Was ich an Euren Antworten nicht so ganz verstanden habe: Ist das grundsätzlich überhaupt möglich? Und was heißt thraedsicher machen? Vor jede Klasse ein synchronized() setzen? Könnte das helfen?

Danke
 

Marco13

Top Contributor
Grundsätzlich ist das möglich. Wenn man 10 Programme hat, mit 10 main-Methoden, dann kann man sich eine Klasse basteln, die jede einzlene main-Funktion in einem eigenen Thread startet, und wenn es keine statischen Variablen gibt dann laufen die 10 Programme so, als ob sie einzlen laufen würden (sie wissen genaugenommen nichtmal was voneinander). (Wenn ein GUI dabei ist, verwischt das ein bißchen, aber sollte keine grundsätzlichen Probleme ergeben).

Viel problematischer ist, wenn du von Client/Server sprichst, die Frage, wie denn kommuniziert wird. (Es wird ja nicht für jeden Thread ein neues Netzwerkkable an den Computer gesteckt :wink: ). Aber von Netzwerkzeug habe ich zu wenig Ahnung, als dass ich sagen könnte, WO es da genau zu Problemen kommen kann....
 

Tobias

Top Contributor
Mit einer derartigen Monitorverteilung provozierst du höchstens Deadlocks. Dein Vorhaben ist kaum mit geringem Aufwand machbar.

Schreib dir eine Batch, das die einzelnen Programme in unterschiedlichen VMs startet und fertig.

mpG
Tobias
 
F

Fritz

Gast
Habs gelöst:

man ruft das ganze mit:
Code:
for (int i = 1; i < 9; i++) {
            Thread t2 = new Thread(new Init());
            new Thread(t2).start();
        }

und schon hat man 8 unabh. Threads bzw. Programme. Gracias!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Log4J bei mehreren Modulen Java Basics - Anfänger-Themen 8
U Funktionale Interfaces mit mehreren abstrakten Methoden? Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
Poppigescorn String mit mehreren Wörtern füllen? Java Basics - Anfänger-Themen 4
CptK Interface Functional interface mit mehreren Methoden Java Basics - Anfänger-Themen 6
P Objekt in mehreren Methoden verwenden. Java Basics - Anfänger-Themen 3
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
freudianslip if-Statement mit mehreren Zahlenwerten Java Basics - Anfänger-Themen 4
B Zeitgleiches Arbeiten am Code mit mehreren Personen? Java Basics - Anfänger-Themen 7
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
S Und-Abfrage mit mehreren Ungleich-Operatoren Java Basics - Anfänger-Themen 17
D Aufruf von mehreren Activities bringt die app zum Absturz Java Basics - Anfänger-Themen 5
G String mit mehreren Attributen aufteilen Java Basics - Anfänger-Themen 6
B Funktion mit mehreren Rückgabewerten aka Prozeduren? Java Basics - Anfänger-Themen 12
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
O compareTo nach mehreren Kriterien Java Basics - Anfänger-Themen 13
B Java Mail: suchen von mehreren Emailadressen Java Basics - Anfänger-Themen 5
R Antwort vom Server an mehreren Clients senden Java Basics - Anfänger-Themen 3
G Refactoring von mehreren identischen Klassen Java Basics - Anfänger-Themen 36
K Geburtsdaten von Mehreren Personen speichern und Alter ausgeben Java Basics - Anfänger-Themen 11
T Interface Methode im Interface mit mehreren Parametern Java Basics - Anfänger-Themen 10
F Problem beim entfernen von mehreren Listenelementen auf einmal (Programmierung des Spiels Arschloch) Java Basics - Anfänger-Themen 1
S boolean Wert von mehreren int Möglichkeiten abfragen ? Java Basics - Anfänger-Themen 4
E if-Bedingung mit mehreren Möglichkeiten ? Java Basics - Anfänger-Themen 6
B MVC Struktur mit mehreren Szenen - wer schaut mal bitte drüber? Java Basics - Anfänger-Themen 2
A String mit mehreren Zeilen splitten Java Basics - Anfänger-Themen 4
U Schleife mit mehreren Bedingungen ? Java Basics - Anfänger-Themen 29
C OOP Von mehreren Klassen aus auf das selbe Objekt zugreifen Java Basics - Anfänger-Themen 8
M Erste Schritte Speichern von mehreren Daten Java Basics - Anfänger-Themen 3
B Variable in mehreren Klassen nutzen Java Basics - Anfänger-Themen 4
D Eine MySQL Verbindung in mehreren Klassen Java Basics - Anfänger-Themen 8
F Interface Nach mehreren Kriterien sortieren Java Basics - Anfänger-Themen 2
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
F Http Post von mehreren Daten Java Basics - Anfänger-Themen 5
Dechasa Interface JFrame mit mehreren Übereinander liegenden JPanel Java Basics - Anfänger-Themen 5
R Eine Datei mit mehreren Zeilen beschreiben Java Basics - Anfänger-Themen 5
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
H Klassen Auf eine Hashtable aus mehreren Klassen zugreifen Java Basics - Anfänger-Themen 12
N Aufgabe: Pizza Konstruktor mit mehreren beliebigen Durchmesser/Preiskombinationen Java Basics - Anfänger-Themen 8
R Objekt erstellen - Attribute mit mehreren Werten Java Basics - Anfänger-Themen 1
F Selben Code in mehreren Projekten Java Basics - Anfänger-Themen 1
I Listen sortieren bei mehreren Listen zu einer Java Basics - Anfänger-Themen 2
M JUnit Testmethoden mit mehreren assert Methoden Java Basics - Anfänger-Themen 1
G Klassen Problem mit mehreren Klassen Java Basics - Anfänger-Themen 2
kaoZ Input/Output Android : Deserialisieren von mehreren Objekten in einer Datei Java Basics - Anfänger-Themen 0
J Menü mit mehreren Bildern Java Basics - Anfänger-Themen 5
kaoZ Input/Output Einlesen von mehreren Zeilen Java Basics - Anfänger-Themen 4
T Variablen Zufallsgenerator mit mehreren Variablen Java Basics - Anfänger-Themen 3
Devil0s Entwicklung mit mehreren Leuten Java Basics - Anfänger-Themen 7
3 JLabel - Text in mehreren Zeilen zentrieren Java Basics - Anfänger-Themen 5
R Compiler-Fehler Auf selben Array in mehreren "cases" vom "Switch" zugreifen Java Basics - Anfänger-Themen 11
K Vererbung Methoden in klassen auslagern und in mehreren Klassen verfügbar machen Java Basics - Anfänger-Themen 8
D Eine Variable in mehreren "switch" Java Basics - Anfänger-Themen 24
P Liste in einer Klasse füllen und mehreren anderen Klassen lesend verwenden Java Basics - Anfänger-Themen 5
propra Objekte in mehreren Listen Java Basics - Anfänger-Themen 6
T GUI Prog. mit mehreren Klassen Java Basics - Anfänger-Themen 4
K Erste Schritte Eingabetext besteht aus mehreren Zeilen? Java Basics - Anfänger-Themen 3
D javac zum Kompilieren von mehreren Dateien Java Basics - Anfänger-Themen 6
P Auslesen von mehreren XML Dateien - Fehler Java Basics - Anfänger-Themen 11
M Java Berechnung mit mehreren Lösungen? Java Basics - Anfänger-Themen 9
T List mit mehreren gleichen Strings bereinigen Java Basics - Anfänger-Themen 4
firefexx Input/Output close() bei mehreren Streams Java Basics - Anfänger-Themen 5
L Server mit mehreren Clients Java Basics - Anfänger-Themen 25
C Methoden Methoden mit mehreren Rückgabewerten Java Basics - Anfänger-Themen 11
D OOP Objekt in mehreren Objekten Java Basics - Anfänger-Themen 3
T Hashmap mit mehreren Werten Java Basics - Anfänger-Themen 9
M Backslash aus mehreren einen machen? Java Basics - Anfänger-Themen 7
M Frame mit mehreren areas Java Basics - Anfänger-Themen 14
P Wie mehreren Threads Aufgaben zuweisen und abarbeiten lassen? Java Basics - Anfänger-Themen 15
Dit_ Aktualisieren von mehreren Views Java Basics - Anfänger-Themen 2
S Datentypen In mehreren Dateien Strings ersetzen Java Basics - Anfänger-Themen 14
B Swing Applikation mit mehreren Klassen Java Basics - Anfänger-Themen 2
J Matheaufgabe aus String mit mehreren Operatoren Java Basics - Anfänger-Themen 16
Q If-Abfrage mit mehreren Bedingungen Java Basics - Anfänger-Themen 6
D Datentypen Aufzählunsdatentyp in mehreren Klassen verwenden? Java Basics - Anfänger-Themen 10
U Umsetzungsfrage: Personen mit mehreren "Rollen" Java Basics - Anfänger-Themen 9
D Datentypen Liste mit Objekten aus mehreren Klassen Java Basics - Anfänger-Themen 3
P Doppelte Einträge in mehreren Textfiles finden und ausgeben Java Basics - Anfänger-Themen 8
M String mit mehreren Zahlen in Integer-Array Java Basics - Anfänger-Themen 2
S Infos aus mehreren JVMS verbinden Java Basics - Anfänger-Themen 3
ModellbahnerTT Klassen in mehreren Projekten benutzten Java Basics - Anfänger-Themen 3
J Performance Vergleich von if-Abfragen mit mehreren Bedingungen Java Basics - Anfänger-Themen 9
B Identifikation eines einzelnen Buttons aus mehreren Buttons per Schleife erzeugten Java Basics - Anfänger-Themen 4
M property mit mehreren werten Java Basics - Anfänger-Themen 3
H Vergleichen mit mehreren Textdateien Java Basics - Anfänger-Themen 2
X Konfiguration einer Anwendung aus mehreren Dateien Java Basics - Anfänger-Themen 11
K Rekusion bei Bäumen mit mehreren Blättern Java Basics - Anfänger-Themen 7
G Sortieren von mehreren klassen Java Basics - Anfänger-Themen 7
-horn- EINE setter/getter klasse aus mehreren klassen befüllen Java Basics - Anfänger-Themen 13
G art hashmap mit mehreren werten pro key Java Basics - Anfänger-Themen 2
L Zeit stoppen in mehreren Threads Java Basics - Anfänger-Themen 2
C Programm mit mehreren Dateien Java Basics - Anfänger-Themen 2
G [Threads]: Mit mehreren Threads 1 ArrayList durchlaufen Java Basics - Anfänger-Themen 19
V Screenshot von mehreren Monitoren machen Java Basics - Anfänger-Themen 6
S equals( mit mehreren möglichkeiten) Java Basics - Anfänger-Themen 18
P JTree mit mehreren Wurzeln Java Basics - Anfänger-Themen 2
B Kürzesten Weg zwischen mehreren Punkten finden (rekursiv) Java Basics - Anfänger-Themen 5
H Ein Hauptprogramm mit mehreren Fenstern . Java Basics - Anfänger-Themen 6
M Kann man im Filter nach mehreren Strings filtern lassen Java Basics - Anfänger-Themen 11
E ArrayList mit mehreren Werten Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben