继承AQS 实现其主要方法
package com.shadow.aqs;import java.util.concurrent.locks.AbstractQueuedLongSynchronizer;import java.util.concurrent.locks.Condition;public class CustomSync extends AbstractQueuedLongSynchronizer { @Override public boolean tryAcquire(long acquires) { if (compareAndSetState(0, acquires)) { setExclusiveOwnerThread(Thread.currentThread()); return true; } return false; } @Override protected boolean tryRelease(long arg) { if(getState() == 0) { throw new IllegalMonitorStateException(); } setExclusiveOwnerThread(null); setState(0); return true; } @Override protected boolean isHeldExclusively() { return getState()==1; } public Condition newCondition() { return new ConditionObject(); }}
实现Lock接口实现加锁解锁
package com.shadow.lock;import com.shadow.aqs.CustomSync;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.*;@Slf4j(topic = "enjoy")public class LockTest10 implements Lock{ CustomSync customSync = new CustomSync(); @Override public void lock() { customSync.acquire(1); } @Override public void lockInterruptibly() throws InterruptedException { customSync.acquireInterruptibly(1); } @Override public boolean tryLock() { return customSync.tryAcquire(1); } @Override public boolean tryLock(long time, TimeUnit unit) throws InterruptedException { return customSync.tryAcquireNanos(1, unit.toNanos(time)); } @Override public void unlock() { customSync.release(1); } @Override public Condition newCondition() { return customSync.newCondition(); } public static void main(String[] args) throws InterruptedException { LockTest10 l = new LockTest10(); new Thread(()->{ l.lock(); log.debug("xxx"); try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } l.unlock(); },"t1").start(); TimeUnit.SECONDS.sleep(1); l.lock(); log.debug("main"); l.unlock(); }}