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();
                    }
                }
            }
        }
    }
    
    
  • 相关阅读:
    前后端分离实践 — 如何解决跨域问题
    bower 和 npm 的区别详细介绍
    yeoman-bower-grunt之间的关系
    软件开发环境-开发环境、测试环境、生产环境的区别
    Tomcat下配置JNDI的三种方式
    SSE
    Java动态代理
    Css之Relative
    多线程之——死锁
    JVM
  • 原文地址:https://www.cnblogs.com/zerodsLearnJava/p/12864500.html
Copyright © 2011-2022 走看看