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

java线程研究---(4)暂停Thread:sleep

2015-08-10 11:57 996 查看
暂停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调度,也是会被系统给替换下来——从执行状态替换到等待执行状态,这种情况不属于线程暂停范畴。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: