java线程池

线程池的好处:
解决创建线程开销大问题

能够预先建立好线程

线程池是由java内置的ThreadPoolExecutor对象来创建

线程池会创建多条线程来等待任务派发

一旦有任务派发 就会有一堆线程去抢这个任务去执行 

里边可以通过ThreadPoolExecutor对象的execute()方法来执行自定义的线程对象Thread 

思考(自定义的线程对象不就是任务吗 里边就是咱们要线程做的操作)

------------------看一下 ThreadPoolExecutor这个对象的参数
创建线程对象
new ThreadPoolExecutor( int corePoolSize,
                              int maximumPoolSize,
                            long keepAliveTime,
                              TimeUnit unit,
                            BlockingQueue<Runnable> workQueue)
corePoolSize:线程的数量 如果定义的数量不够系统会自动扩容几条线程来解决 最多扩容几条由下一条来决定
maximumPoolSize:线程最多可以有多少个
keepAliveTime:当扩容的几条线程空闲后多少时间后销毁这些扩容的线程
TimeUnit 上一条时间的类型:毫秒 秒 

BlockingQueue 任务队列的类型 这个参数是声明我们要使用什么样的队列,为什么要放这个参数呢,是因为我们每次去执行任务的时候,不会去第一时间执行,而是先放到一个线程队列里面(类似于集合)而线程是去队列里边去取任务来执行 思考(为什么要多此一举放到队列里面 直接交给线程执行不就行了吗,那任务量特别多呢,线程特别少呢)

-------------------我这里用一个简单的代码来看一下线程池

package com.zgw.Ann.ThreadPool;


import java.util.LinkedList;
import java.util.concurrent.*;

public class PoolTest1
{
    public static void main(String[] args){


        LinkedBlockingQueue linkedBlockingQueue = new LinkedBlockingQueue();
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3,3,1000, TimeUnit.MILLISECONDS,linkedBlockingQueue);



        for (int i = 0; i <10 ; i++) {
            trr1 trr1 = new trr1();
            threadPoolExecutor.execute(trr1);

        }

        System.out.println("思考一下我的显示位置");

        threadPoolExecutor.shutdown();//关闭线程池

    }
}
class trr1 implements Runnable{

    public void run() {
        System.out.println("嘿嘿嘿");
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值