/**
-
线程池:
-
1.创建线程池(ExecutorService)
-
真正的线程池接口:java.util.concurrent.ExecutorService.
-
Runnable形式。
-
2.创建线程池的步骤:
-
1.创建一个线程池。
-
2.通过Executors下的一个静态方法newFixedThreadPool(int nums),创建一个固定大小的线程池。
-
3.加入一些线程任务对象,Runnable和Callable比较适合做线程池。
-
4.把线程任务对象,Runnable的实例对象,存储到线程池中.
-
小结:
-
1.可以通过newFixedThreadpool创建一个大小的固定的线程池。
-
2.可以使用Runnable的实例对象,提交到线程池。
-
3.pools.submit(Runnable target)提交到线程任务对象,线程池会自动创建线程,并且自动启动线程对象。
-
4.线程池如果已经满了,不会创建新的线程,回复用之前的线程跑一次,!!
-
*/
public class LambdaDemo03 {public static void main(String[] args) {
//1.创建一个线程池。
//2.通过Executors下的一个静态方法,newFixedThreadPool(int nums),创建一个大小固定的线程池。
ExecutorService pools= Executors.newFixedThreadPool(3);
//3.创建线程任务对象(Runnable对象)
Runnable Target=new Runnable(){@Override public void run() { for (int i = 0; i <3 ; i++) { System.out.println(Thread.currentThread().getName()+" "+i); } } }; //4.把线程任务对象,Runnable的实例对象,存储到线程池中。 // 加入线程池任务对象时,线程池会自动创建线程,并且自动启动线程. pools.submit(Target); pools.submit(Target); pools.submit(Target); //第四次加入线程任务,不会再创建新的线程, //因为线程池已经满了,这次会复用某个线程跑一次,这就是线程复用。 pools.submit(Target); //5.手工关闭线程池, //等待线程池中的当前线程认为女巫全部执行完毕以后才会结束线程池。 //pools.shutdown(); //立即关闭,不管线程池是否执行完毕。 pools.shutdownNow();
}
}