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,优先级)

  • 相关阅读:
    react className 有多个值时的处理 / react 样式使用 百分比(%) 报错
    更改 vux Tabbar TabbarItem标题下方的文字激活时的颜色
    angular 图片加载失败 情况处理? 如何在ionic中加载本地图片 ?
    angular 资源路径问题
    webpack 项目实战
    百度地图 创建 自定义控件(vue)
    function 之 arguments 、call 、apply
    手写 redux 和 react-redux
    ARC以及MRC中setter方法的差异
    运行时中给一个对象绑定另外一个对象
  • 原文地址:https://www.cnblogs.com/csong7876/p/9090346.html
Copyright © 2011-2022 走看看