On Mon, Dec 1, 2008 at 5:49 PM, Markus Wiederkehr
<[EMAIL PROTECTED]> wrote:
> On Mon, Dec 1, 2008 at 2:49 PM, Robert Burrell Donkin
> <[EMAIL PROTECTED]> wrote:
>> On Mon, Dec 1, 2008 at 12:56 PM, Markus Wiederkehr
>> <[EMAIL PROTECTED]> wrote:
>>> The same happens with java.util.Set for example. Interface Set itself
>>> is not synchronized but there might be implementations that are.
>>> Collections.synchronizedSet() returns a wrapper that does the
>>> synchronizing. This is very similar to what I have done with
>>> MultiReferenceStorage.
>>
>> the synchronized thread escapes from the scope controlled by the
>> library through the call. if this can be avoided, it should be since
>> it open up potential concurrency issues in code that the library does
>> not control. synchronizing just the reference counting code (as below)
>> would prevent this possibility.
>
> Do I understand correctly that something like this would be okay?
>
>    public void delete() {
>        if (decrementCounter()) {
>            storage.delete();
>        }
>    }
>
>    private synchronized boolean decrementCounter() {
>        return --referenceCounter == 0;
>    }
>
> Because although "this" is used as monitor the object is no longer
> locked when storage.delete() gets invoked and the thread escapes from
> the scope controlled by mime4j?

yes - so long as the call is outside the synchronized block, the
thread won't escape from scope

- robert

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to