美文网首页
有三个线程轮流打印,要求让它们交替输出 1、2、3

有三个线程轮流打印,要求让它们交替输出 1、2、3

作者: thomasyoungs | 来源:发表于2020-06-11 11:39 被阅读0次

问题提出

有三个线程,要求让它们交替输出 1、2、3,打印内容如下:

线程1:1

线程2:2

线程3:3

线程1:1

线程2:2

线程3:3

……


问题分析

这类题是多线程比较典型的一道题,我也看到网上好多类似的题和解法,有的要设置flag,有的用到多个锁,感觉他们把这道题搞复杂了。题目涉及知识点是 wait() 和 notify(),符合要求的线程进来可以打印,打印后释放资源,notifyAll()让所有线程重新抢占,不符合条件的线程需要等待,调用wait(),出让资源。

话不多说直接贴代码

import java.util.concurrent.atomic.AtomicInteger;

/**

* Author:yangzhikuan

* Date:2020-04-20

* Description:Test

*/

public class Test {

public static void main(String[] args) {

MyRunnale myRunnale =new MyRunnale();

        Thread thread =new Thread(myRunnale, "0");

        Thread thread1 =new Thread(myRunnale, "1");

        Thread thread2 =new Thread(myRunnale, "2");

        thread.start();

        thread1.start();

        thread2.start();

    }

static class MyRunnaleimplements Runnable {

private final AtomicIntegeratomicInteger;

        MyRunnale() {

this.atomicInteger =new AtomicInteger();

        }

@Override

        public void run() {

while (true) {

synchronized (atomicInteger) {

String name = Thread.currentThread().getName();

                    int count = Integer.valueOf(name);

                    int current =atomicInteger.get();

                    if(current >15){

break;

                    }

//                    System.out.println(name + "  " + current);

                    if (current %3 == count) {//当前线程可以打印

                        System.out.println("  current Thread "+name +"  ---->  " + current);

                        atomicInteger.set(current +1);

                        atomicInteger.notifyAll();

                    }else {

try {

atomicInteger.wait();

                        }catch (InterruptedException e) {

e.printStackTrace();

                        }

}

}

}

}

}

}

相关文章

  • 有三个线程轮流打印,要求让它们交替输出 1、2、3

    问题提出 有三个线程,要求让它们交替输出 1、2、3,打印内容如下: 线程1:1线程2:2线程3:3线程1:1线程...

  • [java]java经典问题之线程交替打印数字

    问题 给出两个线程,要求两个线程交替打印从1到100,例如:A线程打印1,B线程打印2,A线程打印3...依次类推...

  • iOS 面试题 3个线程顺序打印

    题目1: 3个线程顺序打印 0-100 采用 NSCondition 输出 题目2: 启动三个线程A,B,C,打印...

  • Java线程通信

    Java线程通信 例子:连个线程交替打印1~100终端输出t1:1t2:2t1:3t2:4t1:5... 其实这就...

  • java两个线程交替打印奇偶数

    引言 java面试中经常会遇到这个问题,如何用两个线程交替打印奇偶数。线程A打印1,线程B打印2,线程A打印3,线...

  • 12-12 阿里新零售C2M一面算法题

    1、(JDK1.8)线程A打印a,线程B打印l,线程C打印i,三个线程交替打印,各打印102次,alialiali...

  • ABC

    ABC 有A、B、C 三个线程,A线程 输出“A”,B线程 输出“B”,C线程 输出“C”,要求同时启动3个线程,...

  • 多个线程顺序打印问题

    三个线程分别打印A,B,C,要求这三个线程一起运行,打印n次,输出形如“ABCABCABC....”的字符串。 1...

  • 线程交替打印奇偶数

        面试经常性问到要求手写线程交替打印奇偶数,其实就是考察对线程的灵活控制,本次就用2种方式交替打印奇偶数。并...

  • 一个多线程题目的讨论

    题目:使用四个线程实现输出ABCD,其中线程1输出A,线程2输出B,线程3输出C,线程4输出D,且要求线程1控制所...

网友评论

      本文标题:有三个线程轮流打印,要求让它们交替输出 1、2、3

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