Hallo zusammen,
ich habe probleme synchronized anzuwenden. ich hatte auch einen anderen thread dazu gefunden (http://www.java-forum.org/java-basics-anfaenger-themen/74919-threads-synchronized-mach.html) aber der war geschlossen, deswegen habe ich mal einen neuen thread aufgemacht... ich denke ich habe ein ähnliches Problem wie in dem Oben genannten Tread, aber ich komme noch nicht so ganz dahinter....
folgender Code
in der Ausgabe steht in ungefäht folgendes:
P1 started sync-area
P2 started sync-area
P3 started sync-area
P4 started sync-area
P5 started sync-area
P1 stopped sync-area
P2 stopped sync-area
P3 stopped sync-area
P4 stopped sync-area
P5 stopped sync-area
(plus noch einige andere ausgaben aus anderen Methoden...)
?! aber task2 ist doch synchronized, sollte also nur von einem Thread gleichzeitig ausgeführt werden? wie kann es sien das er die Methode frühlich parallel ausführen lässt?
in dem o.g. Thrad wird vorgeschlagen das man auf ein objekt oder so ähnlich synchronisieren soll. Mir ist nur noch nicht so ganz klar warumm? Mit [c]public synchronized void task2()[/c] habe ich doch gesagt das die methode nicht nebenlaufig ausgeführt werden darf?
Vielen Dank für die Tipps... braindoc
ich habe probleme synchronized anzuwenden. ich hatte auch einen anderen thread dazu gefunden (http://www.java-forum.org/java-basics-anfaenger-themen/74919-threads-synchronized-mach.html) aber der war geschlossen, deswegen habe ich mal einen neuen thread aufgemacht... ich denke ich habe ein ähnliches Problem wie in dem Oben genannten Tread, aber ich komme noch nicht so ganz dahinter....
folgender Code
Java:
class P implements Runnable {
Thread t;
P(int id) { //Konstruktor
t = new Thread(this, "P"+id);
System.out.println("Child thread created:" + t);
t.start();
}
public void run() {
int counter=0;
while(counter<1)
{
task1();
task2();
task3()
task4();
counter++;
}
System.out.println("child killed");
}
public synchronized void task2()
{
System.out.println(Thread.currentThread().getName()+" started sync-area");
doSth(); //beschäftigung
System.out.println(Thread.currentThread().getName()+" stopped sync-area");
}
public void task1(){
//...
}
public void task3(){
//...
}
public void doSth()
{
// hier steht die beschäftigung (mehrere verschachtelte schleifen, aber kein sleep oder wait!)
}
}
class Main {
public static void main(String args[]) {
new P(1); // create a new thread
new P(2); // create a new thread
new P(3); // create a new thread
new P(4); // create a new thread
new P(5); // create a new thread
}
}
in der Ausgabe steht in ungefäht folgendes:
P1 started sync-area
P2 started sync-area
P3 started sync-area
P4 started sync-area
P5 started sync-area
P1 stopped sync-area
P2 stopped sync-area
P3 stopped sync-area
P4 stopped sync-area
P5 stopped sync-area
(plus noch einige andere ausgaben aus anderen Methoden...)
?! aber task2 ist doch synchronized, sollte also nur von einem Thread gleichzeitig ausgeführt werden? wie kann es sien das er die Methode frühlich parallel ausführen lässt?
in dem o.g. Thrad wird vorgeschlagen das man auf ein objekt oder so ähnlich synchronisieren soll. Mir ist nur noch nicht so ganz klar warumm? Mit [c]public synchronized void task2()[/c] habe ich doch gesagt das die methode nicht nebenlaufig ausgeführt werden darf?
Vielen Dank für die Tipps... braindoc