Hallo,
Ich beschäftige mich grad mit Multi-Threading und habe da Verständnisprobleme.
Ich habe mich eingelese was synchronized bedeutet und wollte das dann an einem
Beispiel überprüfen:
Hier habe ich eine Klasse, welche das Interface "Runnable" implementiert und die run()-Methode überschreibt.
In der run-Methode wird einfach ein String, welche ich über den Konstruktor beim Instanziieren
mitliefere, in dem File: "file.txt" gespeichert. Außerdem befindet sich dieser Code im synchronized-Block.
In der main-Methode erzeuge ich 3 Threads und für die start() Methode aus:
Synchronized bedeutet, dass sie den Code von parallelen Zugriffen von Threads schützt oder?
D.h. wenn ein Thread diesen Code ausführt, warten die anderen bis er fertig ist.
Warum wird dann in dem File entweder Test1, Test2 oder Test2 geschrieben?(Je nachdem welcher Thread zuerst startet)Sollten nicht alle drei Strings stehen, da sie nacheinander ausgeführt werden
oder versteh ich das falsch?
mfg
Thomas
Ich beschäftige mich grad mit Multi-Threading und habe da Verständnisprobleme.
Ich habe mich eingelese was synchronized bedeutet und wollte das dann an einem
Beispiel überprüfen:
Hier habe ich eine Klasse, welche das Interface "Runnable" implementiert und die run()-Methode überschreibt.
In der run-Methode wird einfach ein String, welche ich über den Konstruktor beim Instanziieren
mitliefere, in dem File: "file.txt" gespeichert. Außerdem befindet sich dieser Code im synchronized-Block.
Java:
public class SimpleThread implements Runnable {
String name;
public SimpleThread (String name)
{
this.name=name;
}
@Override
public void run()
{
try {
System.out.println("Thread "+Thread.currentThread().getName());
synchronized (this){
BufferedWriter out = new BufferedWriter(new FileWriter("file.txt"));
out.write(name + "\n");
out.newLine();
out.close();
}
}catch (IOException e) {}
}
}
In der main-Methode erzeuge ich 3 Threads und für die start() Methode aus:
Java:
public static void main(String[] args)
{
SimpleThread thread1 = new SimpleThread("Test1");
SimpleThread thread2 = new SimpleThread("Test2");
SimpleThread thread3 = new SimpleThread("Test3");
Thread t1 = new Thread(thread1);
Thread t2 = new Thread(thread2);
Thread t3 = new Thread(thread3);
t1.start();
t2.start();
t3.start();
}
Synchronized bedeutet, dass sie den Code von parallelen Zugriffen von Threads schützt oder?
D.h. wenn ein Thread diesen Code ausführt, warten die anderen bis er fertig ist.
Warum wird dann in dem File entweder Test1, Test2 oder Test2 geschrieben?(Je nachdem welcher Thread zuerst startet)Sollten nicht alle drei Strings stehen, da sie nacheinander ausgeführt werden
oder versteh ich das falsch?
mfg
Thomas
Zuletzt bearbeitet: