多线程相关知识整理(二)

多线程相关知识整理(二)

  1. 生命周期图。

  2. 可通过查看Thread类中的内部类State结合图一起理解。

  3. NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。

    NEW: 线程还未启动的线程的状态。

    RUNNABLE: 可运行线程的线程状态。可能正在JVM中执行,但它也有可能是在等待操作系统中的其他资源,比如处理器,甚至是等待处理器等待IO等操作时,按照惯性思维会觉得线程此时应该是阻塞的状态,但实际上不是。

    BLOCKED: 指一个线程的线程状态阻塞等待监视器锁。 处于阻塞状态的线程正在等待监视器锁进入synchronized(同步)块/方法或调用后重新进入synchronized(同步)块/方法,与操作系统的阻塞状态无关。

    WAITING: 线程等待状态。 线程处于等待状态,由于调用了以下方法: Object.wait(),Thread.join,LockSupport.park()。等待线程在等待另一个线程执行特定动作,比如说一个调用了Object.wait()的线程正在等待另一个线程调用Object.notify()或者Object.notifyAll()。调用了Thread.join()的线程等待线程终止。

    TIMED_WAITING: 线程状态与指定的等待时间等待的线程。当线程处于定时等待状态时的状态,比如调用了Object.wait(long)Thread.join(long)这种传入等待时长的方法。

    TERMINATED: 线程终止的线程状态。 线程执行完毕。

  • ThreadLocal:

    1. 同一个对象根据调用线程不同返回不同的值。

    2. 通常用于储存线程私有的值,方便后续流程使用。

    3. 源码:

      为什么要使用privatestatic修饰ThreadLocal对象,源码中有描述ThreadLocal实例通常是:

      private staic fileds in classes

      为什么要设计成数据不存在ThreadLocal对象中:

      将数据与线程的状态绑定在一起,当线程结束了,相应的局部变量副本也会被垃圾回收,如果ThreadLocal持有数据,那么线程结束了对象无法被回收。

  • 协程:

    1. 操作系统内核缺点:

      慢: 上下文切换极其费时(1000 cycles)

      大: 独立的方法栈需要很多空间。

      需要发起系统调用,在内核态和用户态之间切换。

    2. 协程:

      快: 始终占用CPU,在用户态。

      小: 可以方便的实现上百万的并发度。

    3. 解决的问题:

      多线程调度较慢,占用资源多的问题。

    4. 不解决的问题:

      多线程中最主要的问题: 并发问题 — 死锁/竞争条件。

😆😆持续更新中~~~😆😆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值