美文网首页
Java多线程---顺利周期打印1-75的数字

Java多线程---顺利周期打印1-75的数字

作者: nosixtools | 来源:发表于2019-03-29 12:48 被阅读0次

此题类似于打印循环打印ABC的问题
下面是实现方式

    private static final Integer FINAL_NUM = 75;
    private static Integer Start_NUM = 1;

    public static void main(String[] args) throws InterruptedException {
        Semaphore a = new Semaphore(1);
        Semaphore b = new Semaphore(0);
        Semaphore c = new Semaphore(0);

        ExecutorService poolService = Executors.newFixedThreadPool(3);
        poolService.execute(new Worker(a, b));
        poolService.execute(new Worker(b, c));
        poolService.execute(new Worker(c, a));
        Thread.sleep(1000);
        poolService.shutdownNow();
    }

    public static class Worker implements Runnable {
        private Semaphore current;
        private Semaphore next;

        public Worker(Semaphore current, Semaphore next) {
            this.current = current;
            this.next = next;
        }

        public void run() {
            while(true) {
                try {
                    // 获取当前的锁
                    if(Start_NUM > FINAL_NUM) {
                        break;
                    }
                    current.acquire(); // current - 1
                    for (int i = 0; i < 5; i++) {
                        System.out.println(Thread.currentThread().getName() + "," + Start_NUM++);
                    }

                    if(Start_NUM <= FINAL_NUM) {
                        next.release(); // next + 1
                    }
                } catch (InterruptedException e) {
                    e.fillInStackTrace();
                }
            }
        }
    }

相关文章

  • Java多线程---顺利周期打印1-75的数字

    此题类似于打印循环打印ABC的问题下面是实现方式

  • Java多线程模型

    Java多线程模型 生命周期 Java 线程的生命周期包括创建,就绪,运行,阻塞,死亡 5 个状态。一个 Java...

  • Java知识梳理六

    一、Java多线程一 1.谈谈线程的生命周期和状态转移 关于线程生命周期的不同状态,在Java 5以后,线程...

  • Java线程的生命周期

    概览 Java语言中,多线程是由线程的核心概念驱动的,而线程的生命周期会经历以下的不同状态。 Java java....

  • 3个月面试20多次Java后端,总结的面试必会知识点

    Java多线程并发 先来看看并发知识库体系图: Java线程实现/创建方式? 4种线程池 ? 线程生命周期(状态)...

  • 循环顺序打印

    通过Java多线程方式实现循环顺序打印A、B,而且保证无论多少次循环,都不乱序? 1. 问题描述 通过Java多线...

  • 古诗-1

    1-75大树

  • 带你搞懂Java多线程(五)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四) ...

  • 带你搞懂Java多线程(六)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四)带...

  • 线程池任务执行过程

    前言 JAVA通过多线程的方式实现并发,为了方便线程池的管理,JAVA采用线程池的方式对线线程的整个生命周期进行管...

网友评论

      本文标题:Java多线程---顺利周期打印1-75的数字

      本文链接:https://www.haomeiwen.com/subject/bzklbqtx.html