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

暂停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调度,也是会被系统给替换下来——从执行状态替换到等待执行状态,这种情况不属于线程暂停范畴。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值