package cn.dali3.code08;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/*线程池:
* 在jdk1.5之后,java为我们提供了现成的线程池,可以直接使用。
* 线程池的作用就是在程序第一次启动的时候,创建多个线程放到一个集合中,排列方法类似于队列
* 当我们要使用线程执行任务的时候,从里面取出一个线程(remove),用完之后归还到线程池中(add)
* 优点:
* 1.降低资源消耗,减少创建销毁资源的次数,线程可以重复利用,可以执行不同的任务。
* 2.提高响应速度,当任务需要执行时,不需要等待创建线程,直接使用
* 3.提高线程的可管理性。
*
* jdk1.5之后,提供了 java.util.concurrent.:线程池工厂类,用来生成线程池
* 静态方法:
* static ExecutorService newFixedThreadPool(int nThreads):创建一个指定数量的线程池
*
* nThreads线程的个数
* ExecutorService 是一个接口,返回的是其实现类对象,可以用ExecutorService接口接受(面向接口)
*
* ExecutorService接口的常用方法:
* 1.submit(Runnable task) 提交一个Runnable任务用于执行
* 2.void shutdown(); 销毁线程池
*
* 当线程执行完毕后会自动归还到线程池中,无需手动。这样我们把需要的任务写在Runnable的实现类中
* 利用线程池中的线程用来执行。
*
* 步骤:1.使用Executors类中的静态方法newFixedThreadPool创建一个线程池
* 2.创建Runnable任务,
* 3.用submit方法执行任务*/
public class Demo01 {
public static void main(String[] args) {
ExecutorService es = Executors.newFixedThreadPool(3);
es.submit(new RunnableImpl1());
es.submit(new RunnableImpl1());
es.submit(new RunnableImpl1());
}
}
接口:
package cn.dali3.code08;
public class RunnableImpl1 implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"正在执行");
}
}