PsyLock.java
- package coneforest.psylla.core;
- import coneforest.psylla.runtime.*;
- import java.util.concurrent.locks.ReentrantLock;
- /**
- * The representation of {@code lock}.
- */
- @Type("lock")
- public class PsyLock
- implements PsyObject
- {
- /**
- * Context action of the {@code condition} operator.
- */
- @OperatorType("condition")
- public static final ContextAction PSY_CONDITION
- =ContextAction.<PsyLock>ofFunction(PsyLock::psyCondition);
- /**
- * Context action of the {@code lock} operator.
- */
- @OperatorType("lock")
- public static final ContextAction PSY_LOCK
- =ContextAction.ofSupplier(PsyLock::new);
- private final ReentrantLock lock=new ReentrantLock();
- public PsyLock()
- {
- }
- /**
- * Acquires the lock.
- */
- public void lock()
- {
- lock.lock();
- }
- /**
- * Releases the lock.
- */
- public void unlock()
- {
- lock.unlock();
- }
- /**
- * Queries if this lock is held by the current thread.
- *
- * @return {@code true} if current context holds this lock and {@code
- * false} otherwise.
- */
- public boolean isHeldByCurrentThread()
- {
- return lock.isHeldByCurrentThread();
- }
- /**
- * {@return a {@code condition} object for use with this lock}
- */
- public PsyCondition psyCondition()
- {
- return new PsyCondition(lock.newCondition());
- }
- }