线程硬核知识一览
2022-12-29 11:54:16 5 举报
了解线程的入门笔记
作者其他创作
大纲/内容
终止状态:TERMINATED执行完或者出现异常
运行状态:RUNNABLE操作系统为 '可运行状态' 的线程分配 CPU 时间片,当被 CPU 执行时,变成运行状态
可运行状态:RUNNABLE线程可以分配 CPU 执行
休眠状态:BLOCKED、WAITING、TIMED_WAITING如果处在运行状态的线程调用类似阻塞或者等待时,线程转换为休眠状态
那又为什么要用线程池呢?①自己创建线程,不受统一控制②创建销毁开销大①很好理解,线程的状态很多,而且每一个维护代码的人都自己去处理线程,那整个线程就呈现一个网状,没法维护;②创建销毁开销大?有点意思,创建线程不就是一个 new Thread() 的过程么,这和 new Object() 有什么区别呢,谁会为new A(); new B(); 这样的工作去创建一个池呢?解①:带着问题找答案,先来了解下线程的几种状态,从源码 Thread 类中我们看到枚举 enum State 包含 6 种状态:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED;那为什么有人说是 5 种状态呢,其实这 5 种状态是一个开发人员自己去理解的线程的 5 中状态(也可以称为操作系统通用的线程状态),而 java 语言中的 6 种不过是基与通用的 5 种状态有自己的理解然后调整的。不过到底 5 种还是 6 种,这不重要。咱们可以把 5 种和 6 种的状态对应一下,看看线程的状态到底是怎么转换的。
解②:正如上面说的,new Object(); 和 new Thread(); 到底有什么区别?new Thread(); 在操作系统层并没有创建新的线程,真正转换为操作系统侧面创建线程还需要调用操作系统内核的 API。不仅如此,创建一个线程所需要开辟的空间也不是小数,平均一个线程 1M,所以在性能要求较高的场景,为每个线程申请 1M 的空间有闲的有些笨拙了,所以不得不请出线程池。
初始状态:NEW只是线程在内存中创建,但是还没有分配 CPU;这个创建只是变成语言层面的,比如:new Thread();
0 条评论
下一页