Christian H. Kuhn
2017-09-23 14:44:27 UTC
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<String[]>) 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
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<String[]>) 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