关于线程的理解

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


关于线程的理解

1、线程是什么?

  线程是比进程更轻量级的调度执行单位,目前【java线程】是进行处理器资源调度的【最基本单位】.


2、java线程是什么?

  以【HotSpot】为例,所有的【java线程】都是直接映射到【操作系统】【原生线程】上来实现的,而且中间没有间接结构,
所以【HotSpot】是不会去干涉【java线程】的调度的,它是全权交给了操作系统来处理的,因此,一些线程相关的调度操作都是由【操作系统】
控制的,比如,何时冻结,何时唤醒,该给线程分配多少处理器执行时间,该把线程分配给某个处理器来执行,这些都是由【操作系统】来绝对的。


3、线程的6种状态

1)新建-【new】

  创建后尚未启动的线程

2)运行-【runnable】

  因为【java线程】是直接映射到【操作系统】【原生线程】上来实现的,因此只要观察【操作系统】【原生线程】Running【运行】状态Reaby【就绪】状态就行。

3)无限期等待-【waiting】

  处于这种状态的线程不会被分配到其他处理器来执行,只能通过其他的线程的显式唤醒,来结束无线等待状态。以下方法能让线程陷入无线等待状态:

  1. 没有设置TimeOut参数的Object::wait()方法
  2. 没有设置TimeOut参数的Thread::join方法

4)期限等待-【Timed waiting】

  跟无限期等待状态【waiting】线程很像,但跟它的最主要的区别在于:无需等待其他线程的显示唤醒,过一段时间后,他们会被【操作系统】自动唤醒。以下方法能让线程陷入期限等待状态:

  1. Thead::sleep方法
  2. 设置了TimeOut参数的Object::wait()方法
  3. 设置了TimeOut参数的Thread::join()方法

5)阻塞-【blocked】

  线程被阻塞了,【阻塞状态】【等待状态】的区别是【阻塞状态】在等待着获取到一个【排它锁】,这一事件将在另外一个线程放弃这个【排他锁】的时候发生,而【等待状态】的线程是在等待一段时间,或者被其他线程执行显示唤醒的行为时唤醒。

6)结束-【Terminated】

  已终止线程的线程状态,线程已经结束执行。


4、线程的生命周期

在这里插入图片描述

おすすめ

転載: blog.csdn.net/weixin_38316697/article/details/115119679