package io.github.jast90;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
public class HelloCAS {
public static void main(String[] args) {
AtomicInteger atomicInteger = new AtomicInteger(10);
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 10, 0, TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>(100));
for (int i = 0; i < 100; i++) {
threadPoolExecutor.submit(new Runnable() {
@Override
public void run() {
order(atomicInteger);
}
});
}
threadPoolExecutor.shutdown();
while (true) {
if (threadPoolExecutor.isShutdown()) {
break;
}
}
}
public static boolean reduceStock(AtomicInteger atomicInteger) {
int reduce = atomicInteger.getAndAdd(-1);
if (reduce > 0) {
System.out.println("库存充足:" + reduce);
return true;
} else {
System.out.println("库存不足");
return false;
}
}
public static void order(AtomicInteger atomicInteger) {
if(reduceStock(atomicInteger)) {
System.out.println("生成订单");
}
}
}
库存充足:9
库存充足:3
生成订单
生成订单
库存充足:6
库存充足:7
生成订单
库存充足:5
生成订单
库存充足:4
生成订单
库存充足:8
生成订单
库存充足:10
生成订单
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存充足:1
生成订单
生成订单
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存充足:2
生成订单
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足
库存不足