-
线程池:JDK1.5之后提供的
-
java.util.concurrent.Executors:线程池的工厂类,用来生产线程池
-
Executors类中的静态方法:
-
static ExecutorService newFixedThreadPool(int nThreads) 创建一个可重用固定线程数的线程池
-
参数:
-
int nThreads:创建线程池中包含的线程数量
-
返回值:
-
ExecutorService接口: 返回的是ExecutorService接口的实现类对象,我们可以使用ExecutorService接口接收(面向接口编程)
-
java.util.concurrent.ExecutorService:线程池接口
-
用来从线程池中获取线程,调用start方法,执行线程任务
-
submit(Runnable task):提交一个Runnable任务用于执行
-
关闭/销毁线程池的方法:
-
void shutdown()
-
使用线程池中线程对象的步骤:
- 创建线程池对象,使用线程池的工厂类Executors里面提供的静态方法newFixedThreadPool生产一个指定的数量的线程池
2. 创建Runnable接口子类对象。(task) 定义一个类,实现Runnable接口,重写run方法,设置线程任务,new实现类对象
3. 提交Runnable接口子类对象。 (take task) 调用ExecutorService中的方法submit,传递线程任务(实现类对象),开启新线程,执行run方法
4. 关闭线程池(一般不做)。 调用ExecutorService类中方法shutdown销毁线程池(一般不建议使用)。
- 创建线程池对象,使用线程池的工厂类Executors里面提供的静态方法newFixedThreadPool生产一个指定的数量的线程池
-
*/
public class Demo01ThreadPool {public static void main(String[] args) {
//1.创建线程池对象,使用线程池的工厂类Executors里面提供的静态方法newFixedThreadPool生产一个指定的数量的线程池
ExecutorService threadPool = Executors.newFixedThreadPool(10);
//2.new Runnable接口实现类对象
Runnable task = new RunnableImpl();
//3.提交Runnable接口子类对象。 (take task) 调用ExecutorService中的方法submit,传递线程任务(实现类对象),开启新线程,执行run方法
threadPool.submit(task);// pool-1-thread-1--->创建了一个新的线程任务
// 又创建了一个线程任务
threadPool.submit(new RunnableImpl());// pool-1-thread-2--->创建了一个新的线程任务
threadPool.submit(new RunnableImpl());// pool-1-thread-3--->创建了一个新的线程任务
threadPool.submit(new RunnableImpl());// pool-1-thread-4--->创建了一个新的线程任务
/*- 注意:submit方法结束后,程序并不会终止,是因为线程池控制了线程的关闭
- 将使用完的线程又归还到了线程池中
*/
// 4.关闭线程池(一般不做)。 调用ExecutorService类中方法shutdown销毁线程池(一般不建议使用)。
threadPool.shutdown();
- 将使用完的线程又归还到了线程池中
threadPool.submit(new RunnableImpl());// 抛异常,线程池中没有了,就不能获取到线程了。
- 注意:submit方法结束后,程序并不会终止,是因为线程池控制了线程的关闭
浙公网安备 33010602011771号