当前位置:   article > 正文

高级线程之线程池

高级线程之线程池

高级线程之线程池

1. 线程池产生

为什么会出现线程池?
在普通情况下,我们需要创建并启动一个线程,当任务完成时,我们将其销毁,这样存在两个不断重复的过程(创建和销毁)
解决方案:我们创建一个线程池,当我们需要使用进程时,从进程池中调用一个,使用完时又将其返回线程池中,这样就避免了两个重复的过程

2. 线程池的分类
* 固定尺寸线程池
  1. //创建线程池
  2. ExcutorService tp=Excutor.newFixedThreadPool(N) //N--线程池的大小(可用线程数目)
  3. Thread1 a= new Thread1();
  4. tp.execute(a); //执行线程
  5. tp.shutdown(); //关闭线程池

Q:写代码时可以execute超过n个线程吗?
A:可以,但是由于线程池中只有两个待命线程,所以只有在其中一个线程结束后将其返回线程池才可运行第三个,后面的亦然

* 可变尺寸线程池
  1. ExcutorService tp=Excutor.newCachedThreadPool();
  2. Thread1 a=new Thread1();
  3. tp.execute(a);
  4. tp.shutdown();
3. 线程池的延迟执行
  1. //类
  2. ScheduledExecutorService //实现了时延功能的线程池
  3. //构造器
  4. public static ScheduledExecutorService newScheduledThreadPoll(int n)
  5. public static ScheduledExecutorService newSingleThreadScheduledExecutor() //顾名思义,单线程线程池
  6. //API:
  7. public ScheduledFuture schedule(Runable command,long delay,TimeUnit unit) //设定线程延迟执行时间
4. 自定义线程池
  1. //
  2. ThreadPoolExecutor
  3. //构造器
  4. public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runable> workQueue)
  5. //需要为这个类的对象指定两个值:标准尺寸和最大尺寸,原因在于线程调度的需要,如果请求线程数在最大值之内,都是原则上允许创建新线程的,如果要超过标准值,一般倾向于将请求放到队列中。

转载于:https://www.cnblogs.com/zsyacm666666/p/6901199.html

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/785549
推荐阅读
相关标签
  

闽ICP备14008679号