zoukankan      html  css  js  c++  java
  • 多线程按顺序打印数字,支持配置线程数目和打印数字结尾

    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();
                    }
                }
            }
        }
    }
    
    
  • 相关阅读:
    面向对象案例
    Leetcode--9. 回文数
    调试seanbell/intrinsic遇到的坑
    Ubuntu16.04OPENGL初体验
    Ubuntu16.04重装NVIDIA驱动
    C++之封装继承和多态
    CMKAE简单实用指南
    【学习笔记】C/C++
    C++之重载覆盖和隐藏
    C++之指针和引用
  • 原文地址:https://www.cnblogs.com/zerodsLearnJava/p/12864500.html
Copyright © 2011-2022 走看看