您的位置:首页 > 编程语言 > Java开发

玩转java多线程学习篇三 线程的状态以及Thread类的API

2017-05-03 14:28 288 查看
一,线程的五大状态

线程从创建,运行到结束大致处于五个状态。新建状态,就绪状态,运行状态,阻塞状态,死亡状态。

1:新建状态(New),新建一个线程 new Thread();

2:就绪状态(Runnable),线程对象被创建后,其它线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待获取cpu使用权。

3:运行状态(Running),就绪状态的线程获得cpu使用权,执行代码。

4:阻塞状态(Blocked),线程由于某种原因放弃cpu使用权,暂时停止运行,直到线程回到就绪状态才有机会转到运行状态。

阻塞的三种情况

(1)等待阻塞 wait ,运行中的线程调用wait()方法,JVM会把该线程放到等待池中。

(2)同步阻塞synchronized,运行线程在获取同步锁时,该同步锁正在被线程B占用,JVM会把该线程放到锁池中,等到线程B释放同步锁时,该线程才有机会获取同步锁。

(3)其它阻塞,运行的线程执行sleep()或join()方法,或者发出I/O请求时候。JVM会把该线程设置为阻塞状态。等到sleep()或join()超时或者发出的I/O请求结束时候,JVM会把该线程重新为就绪状态

5:死亡状态(Dead),线程执行结束或者异常退出后,该线程的生命周期就结束了。

线程状态流程图



二,初步认识线程常用API,下一篇中会进行详解

currentThread():返回正在调用的线程信息

isAlive():判断当前线程是否处于活动状态

sleep():指定毫秒数内让正在执行的线程休眠,暂停执行 Thread.sleep(2000);

getId():取得线程的唯一标识

interrupt():当前线程做一个停止的标记

isInterrupted():判断线程是否已经中断

stop():暴力停止线程

suspend():暂停线程

resume():恢复线程运行

yieId():放弃该线程当前的CPU资源

join():指定的线程加入到当前线程

wait():线程等待,使当前线程主动释放互斥锁,并进入该互斥锁的等待队列

notify():唤醒等待的线程

notifyAll():唤醒所有等待的线程

start():本质的功能是从CPU申请另一个线程空间来执行run()方法中的代码,它和当前线程是两条线程,在相对独立的线程空间运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: