- * 目的:了解线程池
- * 线程池的概念:
- * 创建一个池,池里面有固定(不固定)的一些线程,用来等待任务。
- * 在线程执行完任务后,不会关闭线程(除非程序员手动关闭),而是继续等待任务。
- */
- public class ExecutorsThreadPoolTest {
- public static void main(String[] args) {
-
- ExecutorService threadPool = Executors.newFixedThreadPool(3); //创建固定数量的线程池
-
- /**
- * 下面这段代码分析
- * 这段代码需要执行5个任务(每个任务执行3次),而线程池里面只有3个线程。
- * 因此,需要执行第4个任务时,需要等前3个线程中的某个执行完毕。其他任务类似。
- */
- /*
- for(int j=0;j<5;j++){
- final int poolnum = j;
- threadPool.execute(new Runnable(){
- public void run() {
- for(int i=0;i<3;i++)
- System.out.println(Thread.currentThread().getName()+"runnable is :"+i+" pool is"+poolnum);
- }
- });
- }*/
-
- /**
- * Executors.newCachedThreadPool();是创建可根据需要来扩充的一种线程池。
- * 如果线程中没有可用的线程,会创建一个新的线程添加到池中,否则使用池中已有的线程完成任务。
- * 如果线程60秒未被使用会从缓存中移除
- */
- ExecutorService threadPool1 = Executors.newCachedThreadPool();
-
- /**
- * Executors.newSingleThreadExecutor()创建单一线程的线程池
- * 这种线程池在任务执行中途执行失败而终止了这个线程时,会创建一个新的线程继续完成这个任务
- */
- ExecutorService threadPool3 = Executors.newSingleThreadExecutor();
-
- /*for(int j=0;j<5;j++){
- final int poolnum = j;
- threadPool3.execute(new Runnable(){
- public void run() {
- for(int i=0;i<3;i++)
- System.out.println(Thread.currentThread().getName()+"runnable is :"+i+" pool is"+poolnum);
- }
- });
- }*/
-
- /**
- * 创建定时器炸弹的线程池,和上面三个差不多
- * 有常用的两种调度方式
- */
- ScheduledExecutorService timers = Executors.newScheduledThreadPool(3);
-
- //定时器的第一种调度方式,多少秒之后say "I love you",TimeUnit设置时间格式
- /*timers.schedule(new Runnable(){
- public void run() {
- System.out.println("I love you");
- }
- },2,TimeUnit.SECONDS);*/
-
- //定时器的第一种调度方式,多少秒之后某某咆哮“只有上帝和野兽喜欢孤独”,之后每次间隔一秒咆哮一次
- /*timers.scheduleAtFixedRate(new Runnable(){
- public void run() {
- System.out.println("只有上帝和畜生喜欢独孤");
- }
- }, 2, 1, TimeUnit.SECONDS);*/
-
- System.out.println("thread pool is end");
- /*
- * 当我们没有手动关闭线程池时,线程池会一直等待任务。
- * ExecutorService提供了两种关闭线程池的方法,
- * 1、shutdown(); 当任务全部完成后,顺序关闭,不接受新的任务
- * 2、shutdownnow(); 执行完正在执行的任务,暂停正在等待的任务,并返回等待任务列表list<Runnable>
- */
- threadPool.shutdown();
- threadPool.shutdownNow();
- }
- }
复制代码 |
|