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

  • 相关阅读:
    RabbitMq安装笔记
    SpringBoot笔记--Jackson
    SpringBoot笔记--FastJson
    由一个“两次请求”引出的Web服务器跨域请求访问问题的解决方案
    转:SpringMVC之类型转换Converter(GenericConverter)
    npm 命令
    数据分页技巧
    Mongo 开发笔记
    Android 开发
    Bash 笔记
  • 原文地址:https://www.cnblogs.com/csong7876/p/9090346.html
Copyright © 2011-2022 走看看