wait() und notify()



  • Hallo,

    ich habe mehrere Threads von denen jeder für seinen Nachfolger die Vorarbeit erledigt, woraufhin dieser mit seiner Arbeit weitermachen kann.
    Jeder Thread besitzt eine Variable position auf die sein Nachfolger zugreifen kann. Jeder Thread bearbeitet ein Array und setzt position auf die Stelle, die er gerade bearbeitet. Der nachfolgende Thread muss mit seiner Arbeit solange warten bis parent.getPosition() - this.position > 2 ist.
    Dazu hatte ich bisher folgenden Code:

    while (parent.getPosition() - position < 2) {
        Thread.sleep(1);
    }
    

    Nun wollte ich das ganze aber nicht mit dem (meiner Meinung nach) unschönen Thread.sleep lösen, sondern mit einem Lock-Object, das ich per wait und notify synchronisieren wollte. Jeder Thread hat nun noch ein Object lock;, auf das der Nachfolger Zugriff hat. Nun hab ich aber das Problem, dass ich nicht weiß, wie ich das ganze nun benutzen soll, da mir bisher jeder Versuch eine IllegalMonitorStateException eingebracht hat.

    void run() {
    	Object parentLock = parent.getLockObject(); // ist das Object lock des Vorgängers (siehe Zeile 4)
    	for (int i = 0; i < arrayWidth; ++i) {
    		synchronized (lock) {
    			while (parent.getPosition() - position < 2) {
    				synchronized (parentLock) {
    					wait();
    				}
    			}
    
    			//do work
    
    			notify();
    		}
    	}
    }
    

    greetz KN4CK3R



  • Wieso willst du den Code in verschiedenen Threads laufen lassen, wenn er eh darauf warten muss dass irgendein "Vorgänger" fertig ist???? 😕 😕


Anmelden zum Antworten