本文主要是介绍线程池实现循环打印abc,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路:往线程池里面不断的扔任务,每个线程获取到锁后,判断能不能打印,能则打印后释放锁,不能则直接释放锁,直到打印出100个abc后关闭线程池。
package com.example.demo.multithread;import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class LockDemo {static volatile int indicator = 0; // 0-a, 1-b, 2-cpublic static void main(String[] args) throws InterruptedException {Lock lock = new ReentrantLock();CountDownLatch latch = new CountDownLatch(10);Runnable ra = () -> {lock.lock();try {if (indicator == 0 && latch.getCount() > 0) {System.out.print("a");indicator = 1;}} finally {lock.unlock();}};Runnable rb = () -> {lock.lock();try {if (indicator == 1 && latch.getCount() > 0) {System.out.print("b");indicator = 2;}} finally {lock.unlock();}};Runnable rc = () -> {lock.lock();try {if (indicator == 2 && latch.getCount() > 0) {System.out.print("c" + latch.getCount() + " ");indicator = 0;latch.countDown();}} finally {lock.unlock();}};ExecutorService pool = Executors.newFixedThreadPool(13);while (latch.getCount() != 0) {pool.execute(ra);pool.execute(rb);pool.execute(rc);}pool.shutdown();}}
这篇关于线程池实现循环打印abc的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!