栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

笔试题:创建三个线程,第一个线程打印1 2 3 4 5, 第二个线程打印 6 7 8 9 10...

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

笔试题:创建三个线程,第一个线程打印1 2 3 4 5, 第二个线程打印 6 7 8 9 10...

题目:创建三个线程,第一个线程打印1 2 3 4 5, 第二个线程打印 6 7 8 9 10, 第三个线程打印11 12 13 14 15,然后第一个线程再打印16 17 18 19 20,然后第二个线程接着打印21… 依此类推,直到打印到100。

有哪些坑?

  • synchronized关键字对值为[-128,127]之间的Integer类型,不起作用。所以不能用Integer作锁对象。
  • 为了防止打印的值超过100,在每次输出钱都要检查是否超过100了。
  • 网上答案有好多。跑起来符合题目要求的屈指可数。

我的答案:

public class PrintNumTest {
    private static int flag = 1; //1:线程1执行,2:线程2执行,3:线程3执行
    private static int num = 1; //输出的数值
    static int endValue = 100; //题目要求,可以改为别的数,5的倍数就行
    static Object obj = new Object(); //锁对象


    public static void main(String[] args) {
        for (int i = 1; i <= 3; i++) {
            int target = i;
            new Thread(new Runnable() {
                @Override
                public void run() {
                    startPrint(target);
                }
            }, "线程" + i).start();
        }
    }

    public static void startPrint(int targetFlag) {
        while (num <= endValue) {
            synchronized (obj) {
                if (flag != targetFlag) {
                    try {
                        obj.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } else {
                    System.out.print(Thread.currentThread().getName() + ":");
                    for (int i = 1; i <= 5; i++) {
                        System.out.print(num + " ");
                        num++;
                    }
                    //换行
                    System.out.println();
                    flag++;
                    if (flag > 3) {
                        flag = 1;
                    }
                    obj.notifyAll();
                }
            }
        }
    }

}

运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/319188.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号