出现,他可能返回到可运行状态。5、死亡态:当线程的ru
方法完成时就认为它死去。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦死亡,就不能复生。如果在一个死去的线程上调用start方法,会抛出javala
gIllegalThreadStateExceptio
异常。
有关详细状态转换图可以参看本人的“Java多线程编程总结”中的图
二、阻止线程执行对于线程的阻止,考虑一下三个方面,不考虑IO阻塞的情况:睡眠;等待;因为需要一个对象的锁定而被阻塞。1、睡眠Threadsleeplo
gmillis和Threadsleeplo
gmillisi
t
a
os静态方法强制当前正在执行的线程休眠(暂停执行),以“减慢线程”。当线程睡眠时,它入睡在某个地方,在苏醒之前不会返回到可运行状态。当睡眠时间到期,则返回到可运行状态。线程睡眠的原因:线程执行太快,或者需要强制进入下一轮,因为Java规范不保证合理的轮换。
睡眠的实现:调用静态方法。tryThreadsleep123catchI
terruptedExceptio
eepri
tStackTrace
f睡眠的位置:为了让其他线程有机会执行,可以将Threadsleep的调用放线程ru
之内。这样才能保证该线程执行过程中会睡眠。
例如,在前面的例子中,将一个耗时的操作改为睡眠,以减慢线程的执行。可以这么写:publicvoidru
fori
ti0i5i很耗时的操作,用来减慢线程的执行forlo
gk0k100000000ktryThreadsleep3catchI
terruptedExceptio
eepri
tStackTraceSystemoutpri
tl
thisgetName