【常用API】之线程池ThreadPoolExecutor

线程池:ThreadPoolExecutor

默认先创建好指定个数的线程,放入线程池中。
需要使用的时候,先到池子里面,那出来,使用。
用完在还回去,不要销毁掉。

它的消耗比创建销毁更少。

具体实例见课堂代码。

每一执行一批,就是ThreadPoolExecutor的大小。
然后,结束一个,再进入一个。

 

实例:

----创建线程类

package com.xzm.线程池;

//自定义线程类
public class MyTask implements Runnable{
    
    //只是为了让大家看到是第几个线程
    private int num;
    public MyTask(int num) {
        this.num = num;
    }

    //重写
    @Override
    public void run() {
        System.out.println("正在执行task-"+this.num);
        //休眠一会
        try {
            Thread.currentThread().sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("task-"+this.num+",执行完毕!");
    }

}

----在主函数中创建线程池

 

package com.xzm.线程池;

import java.util.concurrent.Executors;
//导入需要的包文件
import java.util.concurrent.ThreadPoolExecutor;

//【线程池】
public class Test {

    //主函数:主线程
    public static void main(String[] args) {
        
        //创建线程池,可以是类中的属性或静态属性或方法变量
        //这里就创建为方法中的变量
        //声明线程池 = (转成线程池对象)系统方法创建;
        ThreadPoolExecutor executor = (ThreadPoolExecutor)Executors.newFixedThreadPool(5);
        
        //循环往池子里面添加线程
        for(int i=1; i<=10; i++) {
            //创建新的线程
            MyTask mt = new MyTask(i);
            //添加到线程池中
            executor.execute(mt);
        }
        
        //停止接收新的任务
        executor.shutdown();
    }

}

 

posted @ 2020-12-14 17:06  Mr.chris  阅读(447)  评论(0编辑  收藏  举报