• 多线程按顺序打印数字,支持配置线程数目和打印数字结尾


    import java.util.concurrent.atomic.AtomicInteger;
    
    /**
     * @author zerodsLyn
     * created on 2020/5/10
     */
    public class MultiThreadSerialPrint {
        private final Thread[] threads;
        /**
         * 打印线程数目
         */
        final int threadNum;
    
        AtomicInteger num;
    
        private final int end;
        /**
           * 打印任务是否结束
           */
        volatile boolean running = true;
    
        public ThreadPrint(int threadNum, int end) {
            this.num = new AtomicInteger(0);
            this.end = end;
            this.threadNum = threadNum;
            this.threads = new Thread[threadNum];
            for (int i = 0; i < threadNum; i++) {
                Thread thread = new Thread(new PrintTask(this), "thread-" + i);
                threads[i] = thread;
            }
        }
    
        public void run() {
            for (Thread thread : threads) {
                thread.start();
            }
        }
    
        public static void main(String[] args) {
            ThreadPrint threadPrint = new ThreadPrint(10, 100);
            threadPrint.run();
            while (threadPrint.running) ;
            System.out.println("done");
        }
    
        private static class PrintTask implements Runnable {
            private final ThreadPrint threadPrint;
            public PrintTask(ThreadPrint threadPrint) {
                this.threadPrint = threadPrint;
            }
    
            @Override
            public void run() {
                while (threadPrint.running) {
                    if (threadPrint.threads[threadPrint.num.get() % threadPrint.threadNum] == Thread.currentThread()) {
                        System.out.println(Thread.currentThread().getName() + " " + threadPrint.num.get());
                        if (threadPrint.num.get() == threadPrint.end) {
                            threadPrint.running = false;
                        }
    
                        threadPrint.num.incrementAndGet();
                    }
                }
            }
        }
    }
    
    
  • 相关阅读:
    搭建ip代理池思想
    maven中央仓库
    git 基本操作
    利用阿里云发送信息
    Ubuntu配置java环境
    mysql 配置
    Quartz中的时间配置
    如何在Maven中配置Spring依赖
    Jquery动态添加/删除表格行和列
    改行做窗纱批发了(浙江绍兴柯桥窗纱)
  • 原文地址:https://www.cnblogs.com/zerodsLearnJava/p/12864500.html
Copyright © 2020-2023  润新知