Java并发学习(2)一认识线程的状态

认识线程的状态

为了复习Java多线程的知识,经过查看资料后通过自己的理解与认识,先画出了一张线程几种状态之间的转换过程图,然后再对几种状态进行具体描述。
这里写图片描述

1、初始状态

初始状态也就是new状态,也就是当我们写到new Thread()的时候,创建了一个新线程,但是该线程还没运行,还没有线程任务可做。

2、可运行状态

可运行状态不是执行了run方法就是可运行状态,而是调用start方法。表明这个线程是可以有资格运行的,主要分三种情况:

  • 这时候的线程就等到时间片轮转到自己,这样就可以抢占到CPU,进行Running状态。
  • 当到Running状态之后并没有运行run方法执行任务,而可能是由于时间片(yied方法:做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会)用完回到Runanble状态。
  • 当处于锁定状态的线程结束当前的锁定Blocked状态之后,重新回到Runnable状态。

3、阻塞状态

阻塞状态主要分为三种,由状态图中就可以知道。

  • 等待阻塞:当线程运行时候,执行了某个对象的wait方法,就会将此线程放入到wait等待池中。

  • 锁定阻塞:当线程运行时,想要获得某个对象的synchronized同步锁,但是这时候锁已经被其他线程占用,那么该未获得对象锁的线程就会被放入锁池,从而导致阻塞。

  • 其他阻塞:当线程执行了sleep方法、调用了其他线程的join方法(join方法:就是让其他线程先执行,那么该线程就会被阻塞,其他线程执行完后该线程才执行,其底层方法是wait)、或者用户I/O请求就会进入阻塞状态(这种情况很好理解,我们在main方法中I/O,就会让Console控制台输入之后才main主线程执行)。

注:从等待阻塞到锁定阻塞,是其他线程调用了notify()或者notifyAll()方法

  • 线程A在调用了对象的wait方法进入等待状态,B线程调用了该对象的notifyAl()方法唤醒了全部的线程,从而A线程在就锁定队列中等待获得锁对象。
  • B线程调用了该对象的notify()方法唤醒了一个线程,但是具体是哪个线程弄不清楚。

4、正在运行状态

正在运行状态就是线程很顺利的获得了时间片,执行run方法中的线程任务,但是正在运行状态的线程可能会被打断从而变为Blocked状态或者回退到Runnable状态。

5、死亡状态

即终止Terminated状态,其发生的原因一般有两个

  • 正常执行完run方法后线程结束进入死亡状态
  • 可能会因为一个没有Catch到的Exception而让线程run方法意外终止,这时候线程就进入了终止死亡状态。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值