线程池就是一个容器,里面存放了很多线程,里面的线程可以复用的, 可以多次执行任务。
相关API:
Executor(接口):Executor是所有线程池的顶层接口, 里面仅仅定义了执行线程任务的方法。
ExecutorService(接口):Executor的子接口,也表示线程池。 这个接口中不仅定义了执行线程任务 的方法,还定义了其他操作线程池的方法。
Executors(工具类): Executors是操作线程池的工具类, 里面定义了一些方法, 可以直接获取线程 池对象。
注意: 线程池对象不能由我们自己new, 而是要通过Executors这个工具类进行获取。
Executors中获取线程池的方法:
static ExecutorService newFixedThreadPool(int nThreads): 用来获取一个定长的线程池, 参数为线程池的长度。
ExecutorService操作线程池的方法:
submit(Runnable task): 使用线程池执行任务。
shutdown(): 销毁线程池
线程池的使用步骤:
1. 使用Executors的静态方法获取线程池对象。
2. 定义Runnable接口的实现类,重写run方法,定义要执行的任务。
3. 调用submit方法,传递Runnable接口的实现类对象, 指定并执行Runnable实现类中的任务。
4. 销毁线程池(一般不做)
public class Demo01ThreadPool {
public static void main(String[] args) {
//使用Executors的静态方法获取线程池对象。
ExecutorService pool = Executors.newFixedThreadPool(2);//2表示线程池中有两个线程.
//调用submit方法,传递Runnable接口的实现类对象, 指定并执行Runnable实现类中的任务。
MyTask myTask = new MyTask();
pool.submit(myTask);
pool.submit(myTask);
pool.submit(myTask);
//销毁线程池
//pool.shutdown();
}
}
public class MyTask implements Runnable{
@Override
public void run() {
//输出100行HelloWorld
for(int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + “正在输出HelloWorld:” + i);
}
}
}