美文网首页
控制线程的执行顺序

控制线程的执行顺序

作者: 康俊1024 | 来源:发表于2019-04-17 23:37 被阅读0次

通过join方法保证多线程的顺序性特性

   static Thread thread1 = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("thread1");
        }
    });
    static Thread thread2 = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("thread2");
        }
    });
    static Thread thread3 = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("thread3");
        }
    });
    public static void main(String[] args) throws InterruptedException {
        thread1.start();
        thread1.join();
        thread2.start();
        thread2.join();
        thread3.start();
        thread3.join();
    }

join

让主线程等待子线程结束以后才能继续运行,执行流程如下:


执行流程.jpg

通过线程池保证多线程的顺序性特性

  static Thread thread1 = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("thread1");
        }
    });
    static Thread thread2 = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("thread2");
        }
    });
    static Thread thread3 = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("thread3");
        }
    });
    
    static ExecutorService executorService = Executors.newSingleThreadExecutor();

    public static void main(String[] args) throws InterruptedException {
        executorService.execute(thread1);
        executorService.execute(thread2);
        executorService.execute(thread3);

        executorService.shutdown();
    }

源码

创建只有一个线程的线程池,适用于需要保证顺序地执行各个任务;并且在任意时间点,不会有多个线程是活动的应用场景。

public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }

相关文章

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

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

  • 控制线程的执行顺序

    通过join方法保证多线程的顺序性特性 join 让主线程等待子线程结束以后才能继续运行,执行流程如下: 通过线程...

  • 控制线程的执行顺序

    在Java多线程中通常来说,在执行线程时,如果要保证线程的执行顺序,可以使用join和Executorservic...

  • 多线程

    [toc] 线程与进程 1 线程:进程中负责程序执行的执行单元线程本身依靠程序进行运行线程是程序中的顺序控制流,只...

  • 多线程知识点更新

    控制线程间的执行顺序 CyclicBarrier类 让一组线程等待至某种状态后全部执行关于CyclicBarrie...

  • GCD

    GCD线程执行的顺序控制 dispatch_group_t group = dispatch_group_crea...

  • 常用的GCD记录一下

    子线程并行 串行 主线程 串行队列 子线程 并行队列 子线程 栅栏函数 控制执行顺序 避免数据竞争 多线...

  • 线程基础

    线程与进程 线程:进程中负责程序执行的执行单元,线程本身依靠程序进行运行,线程是程序中的顺序控制流,只能使用分配给...

  • java多线程干货(一)

    线程与进程 1 线程:进程中负责程序执行的执行单元线程本身依靠程序进行运行线程是程序中的顺序控制流,只能使用分配给...

  • Java多线程基础

    线程与进程 线程:进程中负责程序执行的执行单元 线程本身依靠程序进行运行线程是程序中的顺序控制流,只能使用分配给程...

网友评论

      本文标题:控制线程的执行顺序

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