暂停Thread
sleep方法:
- 顾名思义,睡一会。静态方法Thread.sleep()
- sleep方法会让Thread对象暂时停止一段时间(即,进入blocked暂停状态),然后又恢复继续执行。
- 当一个Thread对象睡醒之后,不是立刻进入执行(running)状态,
- 而是进入等待执行(runnable)状态。
- 如果让一个Thread对象睡一秒钟,只是保证了这个Thread对象至少会停止这么长时间
线程状态图更新如下:
举例:
- 调用完Thread.sleep(1000)方法就是blocking event
- 调用完Thread.sleep(1000)方法之后,当前的Thread对象,就会进入blocked池
- 1s之后(unblocked),进入runnable状态,等待cpu调度进入running状态。
- 调用完Thread.sleep(1000)方法,Thread对象在睡觉期间,可能被外在事物吵醒而中断,所以要处理“InterruptedException”异常。
代码:
线程类MyClock
package thread;
import java.sql.Timestamp;
import java.util.Date;
public class MyClock implements Runnable {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
Timestamp tt = new Timestamp(new Date().getTime());
System.out.println(tt);
} catch (InterruptedException e) {
System.err.println(e);
}
}
}
}
执行类ThreadsClockExample
package thread;
public class ThreadsClockExample {
public static void main(String[] abc) throws InterruptedException {
MyClock myClock = new MyClock();
Thread t1 = new Thread(myClock, "thread, MyClock");
t1.start();
}
}
注意,执行中的线程对象,如果run方法时间够长,那么经过cpu调度,也是会被系统给替换下来——从执行状态替换到等待执行状态,这种情况不属于线程暂停范畴。