zoukankan      html  css  js  c++  java
  • Java 线程池ThreadPoolExecutor简单应用

    什么是线程池:

    线程池就是控制线程的一个池子。用来控制线程数量。


    为什么要使用线程池:

    1.避免系统反复创建和销毁线程影响执行的时间(创建+销毁>>执行时间时)

    2.控制线程数量。线程过多会导致机器执行卡(大约一个线程占用1M空间)


    ThreadPoolExecutor构造方法

    public ThreadPoolExecutor(int corePoolSize,  int maximumPoolSize, long keepAliveTime, TimeUnit unit,  BlockingQueue<Runnable> workQueue)

    參数1:核心线程池大小(标准大小)

    參数2:线程池最大大小

    參数3:设置多长时间超时回收线程

    參数4:是一个枚举,表示 keepAliveTime 的单位

    參数5:存放任务的队列


    实例:

    public classThreadPoolExecutorDemo {
    	
    	public static void main(String[] args) {
    		//LinkedBlockingDeque线程队列大小无限制,不会抛异常
    		BlockingQueue<Runnable> queue  = new LinkedBlockingDeque<Runnable>();
    		//假设核心线程和最大线程同样,那么该线程是固定大小线程池。
    		ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 6, 1, TimeUnit.DAYS, queue);
    		for(int i=0;i<20;i++){
    			executor.execute(new Runnable() {
    				
    				@Override
    				public void run() {
    					try {Thread.sleep(1000);} catch (InterruptedException e) {
    						e.printStackTrace();
    					}
    					System.out.println(Thread.currentThread().getName());
    				}
    			});
    		}
    		//有序的关闭,已经关闭的无其它作用
    		executor.shutdown();
    	}
    }



    线程池在运行线程时会做出例如以下推断:

    1.假设线程数小于核心线程。那么创建并运行这个县城

    2.假设线程数大于核心线程则放入队列中

    3.假设这时队列满了,而且小于最大线程数,那么创建运行这个线程

    4.假设队列满了,而且大于最大线程数。那么抛异常。


    当线程闲来无事时,超过了回收时间,而且线程池数量大于核心数量。那么就回收,直到回到核心线程数量


  • 相关阅读:
    drf—— 序列化组件
    drf—— RESTful API规范
    drf——APIView及其内部函数/类的源码分析
    drf—— drf的安装和使用
    226翻转二叉树
    51,N皇后
    557反转字符串中的单词III
    17.电话号码的字母组合
    459重复的子字符串
    419递增子序列
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6936522.html
Copyright © 2011-2022 走看看