
org.kie.commons.io.impl.lock.ThreadLockServiceImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kie-commons-io Show documentation
Show all versions of kie-commons-io Show documentation
Set of utilities/facades for NIO.2
The newest version!
package org.kie.commons.io.impl.lock;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import org.kie.commons.lock.LockService;
public class ThreadLockServiceImpl implements LockService {
protected final AtomicReference holder = new AtomicReference();
protected final AtomicInteger stackSize = new AtomicInteger();
private final int sleep;
public ThreadLockServiceImpl() {
this( 50 );
}
public ThreadLockServiceImpl( int sleep ) {
this.sleep = sleep;
}
@Override
public void lock() {
while ( holder.get() != null ) {
if ( holder.get().equals( Thread.currentThread() ) ) {
stackSize.incrementAndGet();
return;
}
try {
Thread.sleep( sleep );
} catch ( final InterruptedException ignored ) {
}
}
holder.set( Thread.currentThread() );
stackSize.set( 1 );
}
@Override
public void unlock() {
int size = stackSize.decrementAndGet();
if ( size == 0 ) {
holder.set( null );
} else if ( size < 0 ) {
throw new IllegalMonitorStateException();
}
}
@Override
public boolean isLocked() {
return holder.get() != null && holder.get().equals( Thread.currentThread() );
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy