java线程之Thread类


1. java线程的生命周期

java中的线程的生命周期有6个阶段:
- NEW(新建)
- RUNNABLE(就绪/运行)
- BLOCKED(阻塞)
- WAITING(等待)
- TIMED_WAITING(时间等待)
- TERMINATED(消亡)
线程的生命周期用一个枚举类来表示:

线程的生命周期

线程的生命周期图解

2. 线程的上下文切换

CPU在执行一个线程的过程中,转而去执行另外一个线程,这个叫做线程上下文切换; 在进行线程上下文切换时要保存好当前线程的运行状态, 如: 程序计数器里的值, CPU寄存器里的值等, 以使线程下一次执行能够从中断点恢复执行;

3. java线程的优先级

在java中, 线程的优先级分为 1 - 10 这10个等级;
JDK中使用3个常量来预定义线程优先级的值:

线程优先级

注意: 线程的优先级具有继承性, 比如, 线程A启动线程B, 则B线程的优先级默认与线程A是一样的

4. java线程的分类

java的线程可以分为两种类型的线程: 一种是用户线程, 另一种是守护线程;
守护线程是一种特许的线程, 当jvm进程中不存在非守护线程时则所有守护线程会自动销毁;
相关方法:

守护线程

5. Thread类 的常用方法

  • currentThread 方法 (静态方法)
    返回正在执行当前代码段的线程对象
currentThread()方法
  • sleep(long)方法 (静态方法)
    在指定的毫秒数内让当前正在执行的线程Thread.currentThread()休眠(进入 TIMED_WAITING 状态)

    sleep方法

注意:
调用sleep方法而进入 TIMED_WAITING 状态的线程并不会释放它本身已获得的对象锁;
Thread.sleep(long) 方法执行前或执行时当前线程的表示中断状态的标志被interrupt()方法置为true则会抛出InterruptedException异常;

  • yield() 方法 (静态方法)
    告知jvm当前线程想要放弃当前的CPU资源, 将它让给其他的任务去占用CPU执行时间, 注意: jvm未必会听从它的建议, 即有可能当前线程刚刚放弃又马上获得CPU时间片

  • interrupted() 方法 (静态方法)
    判断当前线程是否已经被中断

interrupted方法

注意: interrupted() 方法会将当前线程的中断状态清除
例子:

interrupted方法例子

  • isInterrupted() 方法 (实例方法)
    判断调用该方法的线程对象是否已经是中断状态
isInterrupted方法
  • interrupt() 方法 (实例方法)
    调用 interrupt() 方法并不是真的停止线程, 而是在当前线程中打上了一个停止的标记
interrupt方法
  • isAlive 方法 (实例方法)
    判断当前的线程是否处于活动状态(活动状态是指线程已经启动且尚未终止, 包括除TERMINATED外的其他状态)
isAlive()方法
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 下面是我自己收集整理的Java线程相关的面试题,可以用它来好好准备面试。 参考文档:-《Java核心技术 卷一》-...
    阿呆变Geek阅读 15,040评论 14 507
  • 线程概述 线程与进程 进程  每个运行中的任务(通常是程序)就是一个进程。当一个程序进入内存运行时,即变成了一个进...
    闽越布衣阅读 4,633评论 1 7
  • Android Handler机制系列文章整体内容如下: Android Handler机制1之ThreadAnd...
    隔壁老李头阅读 14,313评论 24 97
  • Linkin突然出新歌,让我想起来自己有段暗恋,生长在傻傻的初中。认识他是在闺蜜吉他社的演出中,我忘记戴眼镜了,模...
    我一点都不懒阅读 1,283评论 0 0
  • 虽然前一天已经收拾好了一切,但是第二天早上还是起了一大早,把收拾好的包打开又重新检查了一遍,由于激动,动作太大,吵...
    姜念白阅读 3,251评论 1 2

友情链接更多精彩内容