import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
public class xcc {
public xcc() {
final Object lock = new Object();
AtomicInteger a = new AtomicInteger();
AtomicInteger aq = new AtomicInteger(5);
ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 2, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(1024), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
Runnable producerTask = () -> {
int ci = 210;
while (ci > 0) {
synchronized (lock) {
while(a.get() >= aq.get()) {
try {
System.out.println("*********************生产者堵塞********************");
lock.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
a.getAndIncrement();
System.out.println("生产者执行");
lock.notify();
}
ci--;
}
};
Runnable consumerTask = () -> {
while (true) {
synchronized (lock) {
while(a.get() <= 0) {
try {
System.out.println("-------------------消费者堵塞------------------------");
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
a.getAndDecrement();
System.out.println("消费者执行");
lock.notify();
}
}
};
executor.execute(producerTask);
executor.execute(consumerTask);
executor.shutdown();
try {
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new xcc();
}
}
线程池。升级
最新推荐文章于 2024-09-05 10:39:00 发布