文章目录
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
关于线程的理解
1、线程是什么?
线程是比进程更轻量级的调度执行单位,目前【java线程】是进行处理器资源调度的【最基本单位】.
2、java线程是什么?
以【HotSpot】为例,所有的【java线程】都是直接映射到【操作系统】的【原生线程】上来实现的,而且中间没有间接结构,
所以【HotSpot】是不会去干涉【java线程】的调度的,它是全权交给了操作系统来处理的,因此,一些线程相关的调度操作都是由【操作系统】来
控制的,比如,何时冻结,何时唤醒,该给线程分配多少处理器执行时间,该把线程分配给某个处理器来执行,这些都是由【操作系统】来绝对的。
3、线程的6种状态
1)新建-【new】
创建后尚未启动的线程
2)运行-【runnable】
因为【java线程】是直接映射到【操作系统】的【原生线程】上来实现的,因此只要观察【操作系统】的【原生线程】的Running【运行】状态和Reaby【就绪】状态就行。
3)无限期等待-【waiting】
处于这种状态的线程不会被分配到其他处理器来执行,只能通过其他的线程的显式唤醒,来结束无线等待状态。以下方法能让线程陷入无线等待状态:
- 没有设置TimeOut参数的Object::wait()方法
- 没有设置TimeOut参数的Thread::join方法
4)期限等待-【Timed waiting】
跟无限期等待状态【waiting】线程很像,但跟它的最主要的区别在于:无需等待其他线程的显示唤醒,过一段时间后,他们会被【操作系统】自动唤醒。以下方法能让线程陷入期限等待状态:
- Thead::sleep方法
- 设置了TimeOut参数的Object::wait()方法
- 设置了TimeOut参数的Thread::join()方法
5)阻塞-【blocked】
线程被阻塞了,【阻塞状态】和【等待状态】的区别是【阻塞状态】在等待着获取到一个【排它锁】,这一事件将在另外一个线程放弃这个【排他锁】的时候发生,而【等待状态】的线程是在等待一段时间,或者被其他线程执行显示唤醒的行为时唤醒。
6)结束-【Terminated】
已终止线程的线程状态,线程已经结束执行。