创建线程

  • 继承Tread类,重写run()方法
  • 实现Runnable接口,实现run()方法
  • 实现Callable接口,实现call()方法

线程池

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.cc.blocking_queue;

import java.util.concurrent.*;

public class Test {
public static void main(String[] args) {
ExecutorService executorService = new ThreadPoolExecutor(3, 5, 1L, TimeUnit.SECONDS, new ArrayBlockingQueue<>(3), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
for(int i = 0; i < 7; i ++) {
executorService.execute(() -> {
System.out.println(Thread.currentThread().getName() + "====>办理业务");
});
}
executorService.shutdown();
}
}

1
2
3
4
5
6
7
pool-1-thread-1====>办理业务
pool-1-thread-1====>办理业务
pool-1-thread-1====>办理业务
pool-1-thread-2====>办理业务
pool-1-thread-1====>办理业务
pool-1-thread-3====>办理业务
pool-1-thread-4====>办理业务

七个参数:

  • corePoolSize是核心线程数
  • maximumPoolSize是最大线程数
  • keepAliveTime表示在最大线程数中,除去核心线程数的那些线程的最大存活时间
  • TimeUnit表示存活时间的单位
  • workQueue表示存放等待线程的队列
  • threadFactory:线程工厂,创建线程的时候用的,可以用来给线程命名
  • handler:拒绝策略,当线程池满了,新来的任务怎么处理,比如抛出异常