美文网首页
N个线程交替输出的问题

N个线程交替输出的问题

作者: 木木禾木 | 来源:发表于2021-06-09 21:39 被阅读0次

    1、两个不同的线程交替打印Kao、La。
    2、两个线程,一个打印100内的奇数一个打印100内的偶数,交替执行。

    N个线程交替输出:

    
        public static void main(String[] args) {
            //示例:5个线程交替输出100次
            Data data = new Data(100, 2);
            new Thread(new Print(data, 0, "Kao")).start();
            new Thread(new Print(data, 1, "La")).start();
            new Thread(new Print(data, 2, "")).start();
            new Thread(new Print(data, 3, "")).start();
            new Thread(new Print(data, 4, "")).start();
    
            //示例:2个线程交替输出Kao、La
    //        Data data = new Data(100, 2);
    //        new Thread(new Print(data, 0, "Kao")).start();
    //        new Thread(new Print(data, 1, "La")).start();
        }
    
    
    
        //要打印的资源
        public static class Data {
    
            public Data(int total, int t) {
                this.total = total;
                this.t = t;
            }
    
            volatile int count;  //计数
            int total;  //交替输出n次
            int t;  //线程数
        }
    
        //打印奇数的线程
        public static class Print implements Runnable {
            private final int code; //编号
            private final Data data;  //资源
            private final String content;  //输出内容
    
            public Print(Data data, int code, String content) {
                this.data = data;
                this.code = code;
                this.content = content;
            }
    
            public void run() {
                while (data.count <= data.total) {
                    synchronized (data) {
                        if (data.count % data.t == code) {
                            System.out.println(Thread.currentThread().getName() + " --- " + data.count + " --- " + content);
                            data.count++;
                            data.notifyAll();
                        } else {
                            try {
                                data.wait();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }
    
    
    

    5个线程交替输出,结果:

    Thread-0 --- 0 --- 
    Thread-1 --- 1 --- 
    Thread-0 --- 2 --- 
    Thread-1 --- 3 --- 
    Thread-0 --- 4 --- 
    Thread-1 --- 5 --- 
    Thread-0 --- 6 --- 
    Thread-1 --- 7 --- 
    Thread-0 --- 8 --- 
    Thread-1 --- 9 --- 
    Thread-0 --- 10 --- 
    Thread-1 --- 11 --- 
    Thread-0 --- 12 --- 
    Thread-1 --- 13 --- 
    Thread-0 --- 14 --- 
    Thread-1 --- 15 --- 
    Thread-0 --- 16 --- 
    Thread-1 --- 17 --- 
    Thread-0 --- 18 --- 
    Thread-1 --- 19 --- 
    Thread-0 --- 20 --- 
    Thread-1 --- 21 --- 
    Thread-0 --- 22 --- 
    Thread-1 --- 23 --- 
    Thread-0 --- 24 --- 
    Thread-1 --- 25 --- 
    Thread-0 --- 26 --- 
    Thread-1 --- 27 --- 
    Thread-0 --- 28 --- 
    Thread-1 --- 29 --- 
    Thread-0 --- 30 --- 
    Thread-1 --- 31 --- 
    Thread-0 --- 32 --- 
    Thread-1 --- 33 --- 
    Thread-0 --- 34 --- 
    Thread-1 --- 35 --- 
    Thread-0 --- 36 --- 
    Thread-1 --- 37 --- 
    Thread-0 --- 38 --- 
    Thread-1 --- 39 --- 
    Thread-0 --- 40 --- 
    Thread-1 --- 41 --- 
    Thread-0 --- 42 --- 
    Thread-1 --- 43 --- 
    Thread-0 --- 44 --- 
    Thread-1 --- 45 --- 
    Thread-0 --- 46 --- 
    Thread-1 --- 47 --- 
    Thread-0 --- 48 --- 
    Thread-1 --- 49 --- 
    Thread-0 --- 50 --- 
    Thread-1 --- 51 --- 
    Thread-0 --- 52 --- 
    Thread-1 --- 53 --- 
    Thread-0 --- 54 --- 
    Thread-1 --- 55 --- 
    Thread-0 --- 56 --- 
    Thread-1 --- 57 --- 
    Thread-0 --- 58 --- 
    Thread-1 --- 59 --- 
    Thread-0 --- 60 --- 
    Thread-1 --- 61 --- 
    Thread-0 --- 62 --- 
    Thread-1 --- 63 --- 
    Thread-0 --- 64 --- 
    Thread-1 --- 65 --- 
    Thread-0 --- 66 --- 
    Thread-1 --- 67 --- 
    Thread-0 --- 68 --- 
    Thread-1 --- 69 --- 
    Thread-0 --- 70 --- 
    Thread-1 --- 71 --- 
    Thread-0 --- 72 --- 
    Thread-1 --- 73 --- 
    Thread-0 --- 74 --- 
    Thread-1 --- 75 --- 
    Thread-0 --- 76 --- 
    Thread-1 --- 77 --- 
    Thread-0 --- 78 --- 
    Thread-1 --- 79 --- 
    Thread-0 --- 80 --- 
    Thread-1 --- 81 --- 
    Thread-0 --- 82 --- 
    Thread-1 --- 83 --- 
    Thread-0 --- 84 --- 
    Thread-1 --- 85 --- 
    Thread-0 --- 86 --- 
    Thread-1 --- 87 --- 
    Thread-0 --- 88 --- 
    Thread-1 --- 89 --- 
    Thread-0 --- 90 --- 
    Thread-1 --- 91 --- 
    Thread-0 --- 92 --- 
    Thread-1 --- 93 --- 
    Thread-0 --- 94 --- 
    Thread-1 --- 95 --- 
    Thread-0 --- 96 --- 
    Thread-1 --- 97 --- 
    Thread-0 --- 98 --- 
    Thread-1 --- 99 --- 
    Thread-0 --- 100 --- 
    
    Process finished with exit code 0
    
    

    2个线程交替输出Kao、La,结果:

    Thread-0 --- 0 --- Kao
    Thread-1 --- 1 --- La
    Thread-0 --- 2 --- Kao
    Thread-1 --- 3 --- La
    Thread-0 --- 4 --- Kao
    Thread-1 --- 5 --- La
    Thread-0 --- 6 --- Kao
    Thread-1 --- 7 --- La
    Thread-0 --- 8 --- Kao
    Thread-1 --- 9 --- La
    Thread-0 --- 10 --- Kao
    Thread-1 --- 11 --- La
    Thread-0 --- 12 --- Kao
    Thread-1 --- 13 --- La
    Thread-0 --- 14 --- Kao
    Thread-1 --- 15 --- La
    Thread-0 --- 16 --- Kao
    Thread-1 --- 17 --- La
    Thread-0 --- 18 --- Kao
    Thread-1 --- 19 --- La
    Thread-0 --- 20 --- Kao
    Thread-1 --- 21 --- La
    Thread-0 --- 22 --- Kao
    Thread-1 --- 23 --- La
    Thread-0 --- 24 --- Kao
    Thread-1 --- 25 --- La
    Thread-0 --- 26 --- Kao
    Thread-1 --- 27 --- La
    Thread-0 --- 28 --- Kao
    Thread-1 --- 29 --- La
    Thread-0 --- 30 --- Kao
    Thread-1 --- 31 --- La
    Thread-0 --- 32 --- Kao
    Thread-1 --- 33 --- La
    Thread-0 --- 34 --- Kao
    Thread-1 --- 35 --- La
    Thread-0 --- 36 --- Kao
    Thread-1 --- 37 --- La
    Thread-0 --- 38 --- Kao
    Thread-1 --- 39 --- La
    Thread-0 --- 40 --- Kao
    Thread-1 --- 41 --- La
    Thread-0 --- 42 --- Kao
    Thread-1 --- 43 --- La
    Thread-0 --- 44 --- Kao
    Thread-1 --- 45 --- La
    Thread-0 --- 46 --- Kao
    Thread-1 --- 47 --- La
    Thread-0 --- 48 --- Kao
    Thread-1 --- 49 --- La
    Thread-0 --- 50 --- Kao
    Thread-1 --- 51 --- La
    Thread-0 --- 52 --- Kao
    Thread-1 --- 53 --- La
    Thread-0 --- 54 --- Kao
    Thread-1 --- 55 --- La
    Thread-0 --- 56 --- Kao
    Thread-1 --- 57 --- La
    Thread-0 --- 58 --- Kao
    Thread-1 --- 59 --- La
    Thread-0 --- 60 --- Kao
    Thread-1 --- 61 --- La
    Thread-0 --- 62 --- Kao
    Thread-1 --- 63 --- La
    Thread-0 --- 64 --- Kao
    Thread-1 --- 65 --- La
    Thread-0 --- 66 --- Kao
    Thread-1 --- 67 --- La
    Thread-0 --- 68 --- Kao
    Thread-1 --- 69 --- La
    Thread-0 --- 70 --- Kao
    Thread-1 --- 71 --- La
    Thread-0 --- 72 --- Kao
    Thread-1 --- 73 --- La
    Thread-0 --- 74 --- Kao
    Thread-1 --- 75 --- La
    Thread-0 --- 76 --- Kao
    Thread-1 --- 77 --- La
    Thread-0 --- 78 --- Kao
    Thread-1 --- 79 --- La
    Thread-0 --- 80 --- Kao
    Thread-1 --- 81 --- La
    Thread-0 --- 82 --- Kao
    Thread-1 --- 83 --- La
    Thread-0 --- 84 --- Kao
    Thread-1 --- 85 --- La
    Thread-0 --- 86 --- Kao
    Thread-1 --- 87 --- La
    Thread-0 --- 88 --- Kao
    Thread-1 --- 89 --- La
    Thread-0 --- 90 --- Kao
    Thread-1 --- 91 --- La
    Thread-0 --- 92 --- Kao
    Thread-1 --- 93 --- La
    Thread-0 --- 94 --- Kao
    Thread-1 --- 95 --- La
    Thread-0 --- 96 --- Kao
    Thread-1 --- 97 --- La
    Thread-0 --- 98 --- Kao
    Thread-1 --- 99 --- La
    Thread-0 --- 100 --- Kao
    
    Process finished with exit code 0
    

    扩展:
    唤醒指定线程 https://www.cnblogs.com/myseries/p/12531986.html

    相关文章

      网友评论

          本文标题:N个线程交替输出的问题

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