场景应用:用Java写三个线程轮流打印1-100的程序

Posted 杨 戬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了场景应用:用Java写三个线程轮流打印1-100的程序相关的知识,希望对你有一定的参考价值。

文章目录

最近身体不太舒服,只贴代码了,打了点注释,不再解读了,不忙了再来多写几种方法

方法一:一个线程+synchronized关键字

代码如下:

package com.leetcode.www;

class PrintThread extends Thread 
    // 用于三个线程轮流同步打印的锁对象
    private static Object obj =new Object();
    // 打印的数字(计数器)
    private static int count=1;
    // 线程编号
    private int tno;

    // 线程编号传入
    PrintThread( int tno) 
        this.tno = tno;
    

    @Override
    public void run() 
        while (true)
            synchronized (obj) 
                if (count > 100) 
                    break;
                
                // 用数量取余3是否等于编号的操作 实现线程间切换
                if (count % 3 == tno) 
                    System.out.println("线程编号:"+this.tno+"打印:"+count);
                    count++;
                 else 
                    try 
                        obj.wait();
                     catch (InterruptedException e) 
                        e.printStackTrace();
                    
                
                obj.notifyAll();
            
        
    


public class Solution 
    public static void main(String[] args) 
        PrintThread t1 =new PrintThread(0);
        PrintThread t2 =new PrintThread(1);
        PrintThread t3 =new PrintThread(2);

        t1.start();
        t2.start();
        t3.start();
    



运行结果:

方法二:一个线程+lock锁

把上面的synchronized换成lock

代码不写了,大家有兴趣可以实现评论一起探讨

方法三:三个线程+synchronized

把obj放main里面,然后传入。。。。

不过比较麻烦,一开始想是这么个思路,后来写一半觉得麻烦,还不如合成一个了

代码不写了,大家有兴趣可以实现评论一起探讨

以上是关于场景应用:用Java写三个线程轮流打印1-100的程序的主要内容,如果未能解决你的问题,请参考以下文章

Java并发:三个线程轮流打印十次abc

三个线程轮流打印1-75,一个线程一次打印5个数

笔试题--有3个线程A/B/C,其中AB个线程轮流打印1-100 中间如果是10的倍数,则由C线程打印;

多线程打印:三个线程轮流打印0到100

多线程打印:三个线程轮流打印0到100

C++11多线程编程-两个进程轮流打印1~100