并发编程之线程相关操作

线程的生命周期

状态说明
new初始化状态:线程被创建,但还没有调用start()方法
runnable运行状态:Java线程将操作系统中的就绪和运行状态笼统的称作运行
blocked阻塞状态:表示线程阻塞于锁
waiting等待状态:表示线程进入等待状态,进入该状态表示当前线程需要等待其他线程做出一些特定动作(通知或终端)
time_waiting超时等待状态:该状态不同于waitind,它是可以在指定的时间自行返回的
terminated终止状态:表示当前线程已经执行完毕

线程状态之间的转换逻辑图如下所示:

在这里插入图片描述


线程的创建方式

  • 集成Thread

  • 实现Runnable接口

  • 实现Callable接口

    前面的两种方式都是针对于没有返回值的,入股需要获取线程的执行结果则通过实现Callable接口,然后将该类的实体类通过FetureTask进行封装执行


线程池

它帮我们管理线程,避免增加创建线程和销毁线程的资源损耗 。因为线程其实 也是一个对象,创建一个对象,需要经过类加载过程,销毁一个对象,需要走 GC垃圾回收流程,都是需要资源开销的。 提高响应速度。 如果任务到达了,相对于从线程池拿线程,重新去创建一条线 程执行,速度肯定慢很多。 线程用完,再放回池子,可以达到重复利用的效果,节省资源。

线程池的创建
使用Executors创建
  1. Executors.newFixedThreadPool:创建一个固定大小的线程池,可控制并发的线程数,超出的线程会在队列中等待;
  2. Executors.newCachedThreadPool:创建一个可缓存的线程池,若线程数超过处理所需,缓存一段时间后会回收,若线程数不够,则新建线程;
  3. Executors.newSingleThreadExecutor:创建单个线程数的线程池,它可以保证先进先出的执行顺序;
  4. Executors.newScheduledThreadPool:创建一个可以执行延迟任务的线程池;
  5. Executors.newSingleThreadScheduledExecutor:创建一个单线程的可以执行延迟任务的线程池;
  6. Executors.newWorkStealingPool:创建一个抢占式执行的线程池(任务执行顺序不确定)【JDK 1.8 添加】。
使用ThreadPoolExecutor(推荐使用)

核心参数说明

为什么阿里规范强制使用ThreadPoolExecutor进行线程池的创建

  • 【强制】线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这

    样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。

    说明:Executors 返回的线程池对象的弊端如下:

    1) FixedThreadPool 和 SingleThreadPool:

    允许的请求队列的长度可能会堆积大量的请求,从而导致 OOM。

    2) CachedThreadPool:

    允许的创建线程数量为 Integer.MAX_VALUE,可能会创建大量的线程,从而导致 OOM

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值