学习Java多线程(2)
2018-03-12 21:53
197 查看
认识线程的状态
为了复习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方法意外终止,这时候线程就进入了终止死亡状态。
相关文章推荐
- Java多线程编程--(8)学习Java5.0 并发编程包--线程池、Callable & Future 简介
- 关于Java多线程和并发运行的学习(二)
- Java多线程的学习
- 关于Java多线程和并发运行的学习(四)——之CyclicBarrier
- 关于Java多线程和并发运行的学习(五)——同步集合类
- Java多线程学习-Thread.state 有哪些?
- 关于Java多线程和并发运行的学习(五)——并发 Collection
- [置顶] Java多线程学习(六)Lock锁的使用
- JAVA多线程与并发学习总结
- Java多线程浅学习
- 关于Java多线程和并发运行的学习(三)
- 关于Java多线程和并发运行的学习(四)——之Exchanger
- 精通Java多线程学习(五)用Lock和condition实现生产者与消费者
- java多线程(学习笔记)
- Java多线程(全)学习笔记(下)
- 从零学习JAVA多线程(五):线程池的简单介绍
- Java多线程之线程池的学习
- 《Java多线程编程核心技术》学习笔记-第一章
- 学习《java多线程编程核心技术》遇到的一些问题
- Java多线程基础学习