首页 > 编程 > Java > 正文

java 线程池

2019-11-08 03:01:36
字体:
来源:转载
供稿:网友

1.线程池的作用

  限制系统中执行线程的数量

2.为什么要用线程池

 2.1.减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务.

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

3.线程池接口类

    3.1 ExecutorService : 真正的线程池接口。

    3.2 ScheduledExecutorService:能和Timer/TimerTask类似,解决那些需要任务重复执行的问题。

    3.3 ThreadPoolExecutor : ExecutorService的默认实现.

    3.4 ScheduledThreadPoolExecutor : 继承ThreadPoolExecutor的ScheduledExecutorService接口实现,周期性任务调度的类实现。

4.线程池的静态工具类 Executors 常用的方法

    4.1 newSingleThreadExecutor  

      创建一个单线程的线程池,采用无边界队列LinkedBlockingQueue.即线程有限,但队列无限.

    4.2 newFixedThreadPool

      创建固定大小的线程池,采用无边界队列LinkedBlockingQueue.即线程有限,但队列无限.

    4.3 newCachedThreadPool

      创建一个可缓存的线程池 ,采用SynchronousQueue队列. 

    4.4 newScheduledThreadPool

      创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。 

               

 5.线程池的执行策略与BlockingQueue 

    5.1 如果运行的线程少于 corePoolSize(最小线程数量),则 Executor始终首选添加新的线程,而不进行排队.

    5.2 如果运行的线程等于或多于 corePoolSize,则 Executor始终首选将请求加入队列,而不添加新的线程。

    5.3 如果无法将请求加入队列,则创建新的线程,除非创建此线程超出 maximumPoolSize,在这种情况下,任务将被拒绝。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表