Hab ein Problem mit der 'Kommunikation' zwischen zweier Threads. Der aufbau ist ungefähr so (Fast Pseudecode ). Die handle() Methode wird nur einmal aufgerufen während die fire() Methode öfters aufgerufen wird!
Java:
privatefinalObject STICKER =newObject();publicvoidhandle(){newThread(()->{while(true){synchronized(STICKER){// Do alot of Stuff}}}).start();}publicvoidfire(){newThread(()->{synchronized(STICKER){// Do Stuff}}).start();}
Was ich möchte:
Handle läuft ja ununterbrochen, jetzt möchte ich das die fire Methode sozusage eine hohe Priorität hatt und den Thread in der Handle Methode pausiert bis der synchronized Block in der fire Methode durchgelaufen ist. Mit wait() und notify() habe ich nur ein bisschen gearbeitet und verstehe es leider irgendwie nicht
Kann mir einer vlt. zeigen / erklären wie ich dieses Problem löse, und / oder wie man mit notify() wait() genau arbeitet?
Du könntest den grossen synchronized Block in deiner handle() Methode in viele kleine Blöcke aufteilen. Vielleicht kannst du auch die Menge an Code reduzieren, die synchronisiert werden muss.
Du könntest den grossen synchronized Block in deiner handle() Methode in viele kleine Blöcke aufteilen. Vielleicht kannst du auch die Menge an Code reduzieren, die synchronisiert werden muss.
Das ist bestimmt irgendwie möglich.
Aber du könntest den thread auch mit STICKER.wait() pausieren und dann mit STICKER.notify() weiterlaufen lassen. Dann musst du aber sicherstellen, dass notify() auch oft genug aufgerufen wird oder du verwendest wait(timeout) und übergibst als Parameter nur ein paar ms.
Sorry, hab aber keine Ahnung wo ich das STICKER.wait() und das STICKER.notify() hinpacken muss. Außerdem stellt sich mir da die frage, wird alles was synchronized (STICKER) pausiert? oder wie läuft das?
Wenn das allerdings möglich ist, kann man in fast jedem Fall auch den sync-Block kleiner fassen, abgesehen von der (besonders in dem Beispiel deutlichen) Verlangsamung.
Was möchtest du denn damit erreichen?
Das, was du möchtest (Do Stuff soll Do alot of Stuff unterbrechen), klingt grad nach dem Gegenteil von dem, was du programmiert hast (Do alot of Stuff kann nicht von Do Stuff unterbrochen werden)
Erstmal danke für alle eure Guten und konstruktiven Antworten, habe das Problem letztendlich doch alleine gelöst, es stellte sich heraus dass es woaders lag.
Danke an alle trotzdem
Also ich (war) dabei einen eigenen ApplicationLayer zu schreiben (welcher nun fertig ist). Dabei entstand das problem dass ich ein Array immer kopiert habe, also mit einer for schleife, anstatt es (so wie es jetzt ist) in ein eine liste voller Arrays abzulegen.
Das kopieren hat über eine Sekunde gedauert was das Programm zu einigen Fehlern führte weswegen ich (fälschlicherweise) dachte ich könnte es lösen wenn ich den einen Thread warten lasse während der andere das Array Kopiert. War auch ein schlechter stiel.