创建线程的几种方式

Executor:是Java线程池的超级接口;提供一个execute(Runnable command)方法;我们一般用它的继承接口ExecutorService。

Executors:是java.util.concurrent包下的一个类,提供了若干个静态方法,用于生成不同类型的线程池。Executors一共可以创建下面这四类线程池:

  1. newFixedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
  2. newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
  3. newScheduledThreadPool 创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。
  4. newSingleThreadExecutor 创建一个使用单个 worker 线程的 Executor,以*队列方式来运行该线程。它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

ExecutorService:它是线程池定义的一个接口,继承Executor。有两个实现类,分别为ThreadPoolExecutor,ScheduledThreadPoolExecutor。

线程池的继承树:

创建线程的几种方式

ExecutorService常用的几个方法:

  1. execute(Runnable)从父类继承过来的方法
  2. submit(Runnable)
  3. submit(Callable)
  4. invokeAny(...)
  5. invokeAll(...)
  6. shutdown()

execute方法:方法接收一个Runnable实例,并且异步的执行,请看下面的实例:

public class Demo1 {
    
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newSingleThreadExecutor(); //创建一个单线程
        executorService.execute(new Runnable() { //接收一个Runnable实例
            public void run() {
                System.out.println("Asynchronous task");
            }
        });
        executorService.shutdown();
    }
}