Concurrency topic:

Would it be possible to change the lazy init to check if write lock is already 
locked? It will eliminate the posibility of locking the write lock by more then 
one thread.

try {

readLock.lock();

if(is need to init)
{
        boolean hasWriteLock = false;
        try {
                readLock.unlock();
                hasWriteLock  = writeLock.tryLock(); // Could be locked only 
once
                 if(hasWriteLock)
                        doInit();
        } finally 
        {
            if(hasWriteLock)
                 writeLock.unlock();
        
            readLock.lock(); // If the write lock is locked read threads will 
wait
        }
}
return ...

}  finally
{
        readLock.unlock();
}

Reply via email to