- 单机锁代码
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.LockSupport;
public class AloneLock implements Lock {
AtomicReference<Thread> owner = new AtomicReference<>();
LinkedBlockingQueue<Thread> waiters = new LinkedBlockingQueue<>();
@Override
public void lock() {
while (!owner.compareAndSet(null,Thread.currentThread())){
waiters.add(Thread.currentThread());
LockSupport.park();
waiters.remove(Thread.currentThread());
}
}
@Override
public void unlock() {
if(owner.compareAndSet(Thread.currentThread(),null)){
for (Object object:waiters.toArray()){
Thread next= (Thread) object;
LockSupport.unpark(next);
}
}
}
@Override
public void lockInterruptibly() throws InterruptedException {
}
@Override
public boolean tryLock() {
return false;
}
@Override
public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
return false;
}
@Override
public Condition newCondition() {
return null;
}
}

- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 分布式锁