Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: "Christian H. Kuhn" Newsgroups: de.comp.lang.java Subject: Re: Parallelprogrammierung Date: Tue, 3 Oct 2017 15:40:32 +0200 Lines: 40 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8bit X-Trace: individual.net v3iMt+LDTyXDPt3SEj6H6gkIgJLmirYzKom/N5Ntpwmm6fals= Cancel-Lock: sha1:zHE+cnoB2z4vZneyuZ6l4VlAur8= User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 In-Reply-To: Xref: csiph.com de.comp.lang.java:13141 Am 24.09.2017 um 10:30 schrieb Marcel Mueller: > On 23.09.17 16.44, Christian H. Kuhn wrote: >> 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. > > Dur suchst ein ->ReadWriteLock. In der Tat. Vielen Dank! ReentrantReadWriteLock; importData() macht einen writeLock().lock(), exportData() einen readLock().tryLock(). Das, was danach kommt, steht sowieso in einem try-with-resources-Block, da ist das finally mit dem jeweiligen unlock() kein Problem. >> Alles, was ich an Literatur zur Parallelprogrammierung gefunden habe, >> geht davon aus, dass immer nur ein Thread im kritischen Bereich sein >> darf. > > Dann hast Du zu wenig gesehen. ;-) Da sind wir uns einig :-) > Bibliotheken sollten niemals Exceptions in Standardsituationen werfen. > Dafür sind sie zu teuer. Und daran halten sich die Standard > Lock-Implementierungen auch. Wenn List exportData(String, String) den Lock nicht bekommt, gibt es null zurück. Wer fremde Bibliotheken aufruft und nicht auf null checkt, hat es nicht besser verdient ;-) Und nachdem das geklärt ist, ist mir aufgefallen, dass auch andere Rechner ihre (eingeschränkten) QDatabase-Objekte mit ihren spezifischen Clients auf die Datenbank zugreifen und nicht über den Prozess, in dem mein QDatabase-Objekt die Locks verwaltet. Ich darf also noch Locks auf die Tabellen in Postgresql setzen. Andere Gruppe. lg QNo