并发(1)--线程池简介

    通常情况下,当我们使用一个线程的时候,采用new方式去创建一个线程,这样实现起来很方便,但是与此同时存在一个问题:大量创建线程,会带来资源的消耗,并且如果并发的数量很多的时候,并且每个线程的执行时间很短的话,频繁创建线程会很消耗效率,因为频繁创建和销毁线程是一个很耗时间的过程。

    如何使得线程可以复用,即执行完毕并不会销毁,进而可以执行其他的任务,那该多好啊,在java中可以通过线程池来达到这样的效果。

    那么线程池是一个什么样的工作流程呢?

    我们知道大量请求并发访问的时候,服务器不断地创建和销毁对象的开销很大,所以提高服务器效率的一个手段就是尽可能的减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。于是基于这个,我们引入“池”的概念。何为“池”,“池”就是使得人们可以定制一定量的资源,之后对这些资源进行复用,而非频繁的创建和销毁。

    线程池是预先创建线程的一种技术,并不是在任务到来之际创建,而是到来之前创建,并且是创建一定数量的线程,放入空闲队列中,这些线程都是处于休眠的状态,虽是启动,但是并不消耗CPU,只是占用很小的内存空间。

    只有当请求到来的时候,线程池给这次请求分配一个空闲线程进行处理,当请求数目超过预定创建的线程时候,线程池可以自由创建一定数量的新线程,当系统大部分线程处于空闲的时候,此时线程池可以移除一部分处于停用状态的线程。

    那如果这样的话,是不是线程池创建的线程数量越多越好呢?其实不是这样的,线程池使用需要注意的是线程池大小与性能,并发,死锁,资源不足以及线程泄露等问题。

    值得注意的是:

    1.      线程池大小,并不是越多越好,与系统运行的软硬件有关系,一般建议与CPU数量相适合最好。

    2.      并发错误,多线程容易出现并发错误。

    3.      线程泄露,任务执行完毕但是线程并未返回线程池导致线程泄露。

    下节讲解线程池的分类使用~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值