Path: csiph.com!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: "Christian H. Kuhn" Newsgroups: de.comp.lang.java Subject: Parallelprogrammierung Date: Sat, 23 Sep 2017 16:44:27 +0200 Lines: 51 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: individual.net 2Zhcasp8nD1c0GpZlXwrIwrFsW6mPL17JLJQ69tGasxkDtGmg= Cancel-Lock: sha1:3P49pzmpkjwdMRCh9xgOr5AxkB4= X-Mozilla-News-Host: snews://news.individual.net:563 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 Xref: csiph.com de.comp.lang.java:13139 Hallo Gemeinde, So langsam wird das was. Umfangreiches Refactoring dank der vielen Tips hier: single responsibility, dependency injection deutlich besser, umgesetzt. Tests verbessert dank Mockito, jimfs, von PowerMock nur Whitebox. So langsam wird der Code vorzeigbar ;-) Ein Problem habe ich noch. public class QFdsbDatabase { [...] void importData([...]) { [...] } public List) exportData(String, String) { [...] } } exportData() und importData() schließen sich gegenseitig aus. Das bekäme ich mit synchronized hin. Aber. Es sollen mehrere Threads exportData() aufrufen können, ohne aufeinander warten zu müssen. importData() soll auf die Beendigung vom letzten exportData() warten. exportData() soll nicht auf die Beendigung von importData() warten, sondern eine Exception werfen. Die Wartezeit kann über eine Stunde betragen, da scheint mir ein Abbruch besser. Sobald importData() wartet, soll jeder exportData()-Aufruf eine Exception werfen, nicht erst, sobald importData() rechnet. Alles, was ich an Literatur zur Parallelprogrammierung gefunden habe, geht davon aus, dass immer nur ein Thread im kritischen Bereich sein darf. Dass wie hier bei exportData() mehrere Threads gleichzeitig laufen dürfen und diese n Threads auf der einen Seite einem Thread gegenüberstehen, habe ich nirgendwo gefunden. Auch habe ich nur Literatur gefunden, in der ein blockierter Thread wartet und nicht via Exception geregelt wird. Dennoch scheint mir mein Problem nicht so abwegig, dass es nicht schon irgendwo gelöst wurde. Und wenn ich keine Lösung finde, suche ich falsch. Kann mich jemand auf das richtige Gleis heben? TIA QNo