线程池

#多线程

Java标准库提供了ExecutorService接口表示线程池,典型用法如下:

import java.util.concurrent.*;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个固定大小的线程池:
        ExecutorService es = Executors.newFixedThreadPool(4);
        for (int i = 0; i < 6; i++) {
            es.submit(new Task("" + i));
        }
        // 关闭线程池:
        es.shutdown();
    }
}
 
class Task implements Runnable {
    private final String name;
 
    public Task(String name) {
        this.name = name;
    }
 
    @Override
    public void run() {
        System.out.println("start task " + name);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
        }
        System.out.println("end task " + name);
    }
}

线程池的类型包括:

  • FixedThreadPool:线程数固定的线程池;
  • CachedThreadPool:线程数根据任务动态调整的线程池;
  • SingleThreadExecutor:仅单线程执行的线程池。

使用shutdown()方法关闭线程池的时候,它会等待正在执行的任务先完成,然后再关闭。 shutdownNow()会立刻停止正在执行的任务, awaitTermination()则会等待指定的时间让线程池关闭。