美文网首页
多线程顺序执行问题

多线程顺序执行问题

作者: 心_怀 | 来源:发表于2018-01-10 11:47 被阅读63次

编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。

1、线程未加顺序执行程序
package com.pertops.route;

public class ThreadTemplate {

    public static void main(String[] args) {
        for(int i=0;i<10;i++){
            new Thread(new Runnable() {         
                @Override
                public void run() {
                    sysThreadName();
                }
            }, "A").start();
            new Thread(new Runnable() {         
                @Override
                public void run() {
                    sysThreadName();
                }
            }, "B").start();        
            new Thread(new Runnable() {         
                @Override
                public void run() {
                    sysThreadName();
                }
            }, "C").start();            
        }

    }
    
    static public void sysThreadName(){
        System.out.print(Thread.currentThread().getName());
    }
}

15280d70649a94fd4915716b1cfeeea.png
当上面这段代码敲完运行后并会发现线程输出时是无序的~换个角度思考一下如何使这些线程按人为所期望的顺序执行呢?

使用线程的join方法,该方法的作用是“等待线程执行结束”,即join()方法后面的代码块都要等待现场执行结束后才能执行

2、线程添加顺序执行程序
package com.pertops.route;

public class ThreadTemplate2 {
    
    public static void main(String[] args) throws InterruptedException {
        for(int i=0;i<10;i++){
            Thread thread1 =  new Thread(new Runnable() {           
                @Override
                public void run() {
                    sysThreadName();
                }
            }, "A");
            
            Thread thread2 = new Thread(new Runnable() {            
                @Override
                public void run() {
                    sysThreadName();
                }
            }, "B");    
            
            Thread thread3 = new Thread(new Runnable() {            
                @Override
                public void run() {
                    sysThreadName();
                }
            }, "C");
            
            thread1.start();
            //thread1.sleep(100);
            thread1.join();
            
            thread2.start();
            //thread2.sleep(100);
            thread2.join();
            
            thread3.start();
            thread3.join();
            //thread3.sleep(100);
        
        }

    }
    
    static public void sysThreadName(){
        System.out.print(Thread.currentThread().getName()+"--");
    }
}

f34a184a5e78fd5ab4011d388ae58e8.png

相关文章

  • 多线程顺序执行问题

    编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果...

  • 多线程执行顺序问题

    【问题】请解释下以下线程的执行顺序 【解释】 结果为 或 主线程启动了两个线程,由main线程生成了一个threa...

  • python——多线程

    多线程-threading 子类完成创建多线程 线程的执行顺序也是主线程和各个子线程随机执行,顺序不确定 线程对全...

  • 线程按指定顺序执行

    在多线程中线程的执行是CPU随机调度的,无法指定线程的执行顺序,比如我们要让多线程按顺序执行输出 这段代码的输出顺...

  • 多线程顺序执行

    第一种方法是join;第二种方法是线程池newSingleThreadExecutor final Thread ...

  • 多线程(1)

    多线程目的: 解决效率问题,我们平时写的代码,大多可以理解为单线程执行,即顺序执行,一个流程执行完成后,再执行另外...

  • 1.2.1线程的启动顺序与start()的执行顺序无关

    执行start()方法的顺序不代表线程启动的顺序。 执行结果 摘选自 java多线程核心编程技术-1.2.1

  • 并发

    保证多线程的顺序执行 方式1:通过join方法保证多线程的顺序join作用:让主线程等待子线程结束后才能继续运行 ...

  • 多线程代码执行先后的顺序问题

    前言多线程代码执行先后的是怎样的呢?我认为执行代码的先后顺序最外层的dispatch_sync(同步)和dispa...

  • 如何控制多线程执行的顺序?

    先看一段代码: 执行结果: 可以看到线程的执行顺序是随机的。查阅资料控制多线程执行顺序有以下两种方法: 方法1:调...

网友评论

      本文标题:多线程顺序执行问题

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