线程的暂停状态

对于线程对象,如果想实现让其暂时停止,但是恢复运行后又不产生一个新的线程对象时,就需要学习如何使线程处于暂停状态。

4种方式进入blocked状态

1、sleep()

主要用来实现让Thread对象“睡觉”,不过在睡觉时设置了个闹钟,时间一就会恢复。

基本格式:

Thread.sleep(long mill)

参数millis用来表示睡眠的时间,这个时间单位为千分之一秒。


2、yield()

当cpu正调用一个线程运行时,如果该线程睡眠一段时间后才被执行,就需要调用sleep()方法;如果该线程不想这时候运行,可以调用yield()方法。对于sleep()方法,线程在指定的时间里肯定不会由running状态转换到runnable状态;而对于yield()方法,线程可能由running状态转换到runable状态。

基本格式:

Thread.yield()


class BlockedState extends Thread {
	String name;

	public BlockedState(String n) {
		name = n;
	}

	public void run() {
		for (int i = 1; i <= 5; i++) {
			System.out.println(name + " Hello " + i);
			 Thread.yield();
		}
	}

}

public class TestBlockedState {
	public static void main(String argv[]) {
		BlockedState h1 = new BlockedState("Thread1");
		BlockedState h2 = new BlockedState("Thread2");

		h1.start();
		h2.start();
	}
}
代码解析
在上述代码中,线程Thread1输出1后,接着切换到Thread2输出1,然后继续重复上面的步骤输出2~5.之所以会出现这样的结果,是因为当Thread1输出1后,调用yield()方法切换到Thread2线程,该线程输出1后又调用yield()方法切换到Thread1线程。这样轮换着输出1~5.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值