多线程_03_线程池

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010785685/article/details/52080865

线程池:

      是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程。线程池中线程的数量通常完全取决于可用内存数量和应用程序的需求。然而,增加可用线程数量是可能的。线程池中的每个线程都有被分配一个任务,一旦任务已经完成了,线程回到池子中并等待下一次分配任务。


作用:

减少了创建和销毁线程的次数;

每个工作线程都可以被重复利用;

可执行多个任务;

可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为因为消耗过多的内存,而把服务器累趴下


线程缓冲池:

      是对线程进行缓冲的一种技术,线程池在还没有任务到来之前,创建一定数量(N1)的线程,放入空闲队列中,当然N1完全可用为0,在任务到来时再创建线程也不晚。这些线程都是处于阻塞(Suspended)状态,不消耗CPU,但占用较小的内存空间。当任务到来后,缓冲池选择一个空闲线程,把任务传入此线程中运行;当任务完成后线程交还到缓冲池中。如果池内线程都在处理任务后,有新任务到来时缓冲池自动创建新线程,用于处理更多的任务。当系统比较空闲时,大部分线程都一直处于暂停状态,线程池根据设置自动销毁一部分线程,回收系统资源。



Java通过Executors提供四种线程池

newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。

newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO, 优先级)执行。

 

服务器适合的线程池数:cup数+1


如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。


猜你喜欢

转载自blog.csdn.net/u010785685/article/details/52080865
今日推荐