原子锁类型是JDK Atomic* 相关的类。如AtomicInteger、AtomicLong 等等。
package com.forestar.xht.util;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 原子锁
*
* @author PJL
*
*/
public class AtomicLock {
private static AtomicInteger flag = new AtomicInteger(0);
/**
* 获取锁的值
* @return
*/
public static int getLockValue() {
return flag.intValue();
}
/**
* 阻塞
*/
public static void blockingUntilUnlock() {
while (flag.intValue() == 1) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 加锁
*
* @return
*/
public static int lock() {
blockingUntilUnlock();
if (flag.intValue() == 0) {
return flag.incrementAndGet();
}
return flag.intValue();
}
/**
* 去锁
*
* @return
*/
public static int unlock() {
if (flag.intValue() == 1) {
return flag.decrementAndGet();
}
return flag.intValue();
}
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
String name = "thread-" + i;
new Thread(() -> {
AtomicLock.lock();
System.out.println(name + "加锁"+" "+" 值 "+AtomicLock.getLockValue());
AtomicLock.unlock();
System.out.println(name + "去锁"+" "+" 值 "+AtomicLock.getLockValue());
}).start();
}
}
}
测试结果:
thread-1加锁 值 1
thread-1去锁 值 0
thread-4加锁 值 1
thread-4去锁 值 0
thread-7加锁 值 1
thread-7去锁 值 0
thread-8加锁 值 1
thread-8去锁 值 0
thread-9加锁 值 1
thread-9去锁 值 0
thread-10加锁 值 1
thread-10去锁 值 0
thread-2加锁 值 1
thread-2去锁 值 0
thread-3加锁 值 1
thread-3去锁 值 0
thread-5加锁 值 1
thread-5去锁 值 0
thread-6加锁 值 1
thread-6去锁 值 0