zoukankan      html  css  js  c++  java
  • 如何保证线程的执行顺序

    示例代码

    static Thread t1 = new Thread(new Runnable() {
    public void run() {
    System.out.println("Thread1");
    }
    });
    static Thread t2 = new Thread(new Runnable() {
    public void run() {
    System.out.println("Thread2");
    }
    });
    static Thread t3 = new Thread(new Runnable() {
    public void run() {
    System.out.println("Thread3");
    }
    });
    1.使用join
    public static void main(String[] args) throws InterruptedException {
    t1.start();
    t1.join();
    t2.start();
    t2.join();
    t3.start();
    }
    join源码:
    public final synchronized void join(long millis)
        throws InterruptedException {
            long base = System.currentTimeMillis();
            long now = 0;

            if (millis < 0) {

                throw new IllegalArgumentException("timeout value is negative");
            }

            if (millis == 0) {
                while (isAlive()) {
                    wait(0);
                }
            } else {
                while (isAlive()) {
                    long delay = millis - now;
                    if (delay <= 0) {
                        break;
                    }
                    wait(delay);
                    now = System.currentTimeMillis() - base;
                }
            }
        }
    join让主线程等待,至子线程执行结束


    2.使用ExecutorService
    static ExecutorService es = Executors.newSingleThreadExecutor();
    public static void main(String[] args) throws InterruptedException {
    es.submit(t1);
    es.submit(t2);
    es.submit(t3);
    es.shutdown();
    }
    ExecutorService 提供了4种线程池,分别是:
    newCachedThreadPool;缓存线程池,可灵活回收、新建
    newFixedThreadPool;定长线程池,可控制最大并发数,超出在队列中等待
    newScheduledThreadPool;定长线程池,可定时、周期执行
    newSingleThreadExecutor;单一线程池,按顺序执行(FIFO,LIFO,优先级)

  • 相关阅读:
    Oracle数据库容灾备份技术探讨
    asp.net 生成、解析条形码和二维码
    推荐一些C#相关的网站、资源和书籍
    内部集群的 DNS server 搭建
    Nginx 负载均衡
    webpack技巧:动态批量加载文件
    Mock.js使用
    @vue/cli 项目编译重复命中缓存问题解析
    用React hooks实现TDD
    从 React 切换到 Vue.js
  • 原文地址:https://www.cnblogs.com/csong7876/p/9090346.html
Copyright © 2011-2022 走看看