yield,sleep,join方法的使用

一.yield:Thread类中的静态方法
该方法用于使当前线程主动让出当次CPU时间片回到Runnable状态,等待分配时间片。注意当前线程使用yield之后仍有可能立即又获得时间片,从Runnable态进入Running态

package com.zc;
public class Z01Yield {
	public static void main(String[] args) {
		new Thread("线程1"){
			public void run() {
				for(int i=0;i<100;i++){
					System.out.println(Thread.currentThread().getName()+":i="+i);
					if(i==20){
						Thread.yield();
					}
				}
			};
		}.start();
		
		new Thread("线程2"){
			public void run() {
				for(int i=0;i<100;i++){
					System.out.println(Thread.currentThread().getName()+":i="+i);
				}
			};
		}.start();
	}
}

以上代码当线程1中i循环到20时,调用Thread.yield(),让出时间片,但是输出结果并不是很明显,因为线程1调用Thread.yield()之后并不能保证线程2能抢占到cpu时间片。

二、join:该方法用于等待当前线程结束。此方法是一个阻塞方法。
该方法声明抛出InterruptException。

package com.zc;
public class Z02Join {
	public static void main(String[] args) {
		final Thread t2=new Thread("线程2"){
			public void run() {
				for(int i=0;i<100;i++){
					System.out.println(Thread.currentThread().getName()+":i="+i);
				}
			};
		};
		t2.start();
		
		new Thread("线程1"){
			public void run() {
				for(int i=0;i<100;i++){
					System.out.println(Thread.currentThread().getName()+":i="+i);
					if(i==20){
						try {
							t2.join();//调用t2.join();则当前线程会等待t2线程执行完毕再继续执行
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
				}
			};
		}.start();
	}
}
在线程1中调用t2.join(),则当前线程会进入阻塞态,直到t2线程执行完毕,当前线程才会继续执行。

三、sleep:

Thread的静态方法sleep用于使当前线程进入阻塞状态:
static void sleep(long ms)
该方法会使当前线程进入阻塞状态指定毫秒,当指定毫秒阻塞后,当前线程会重新进入Runnable状态,等待分配时间片。
该方法声明抛出一个InterruptException。所以在使用该方法时需要捕获这个异常。

package com.zc;
public class Z03Sleep {
	public static void main(String[] args) {
		final Thread t2=new Thread("线程1"){
			public void run() {
				for(int i=0;i<100;i++){
					try {
						Thread.sleep(1000);//sleep一秒
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName()+":i="+i);
				}
			};
		};
		t2.start();
	}
}
该线程会每隔1秒输出一次
详细的线程状态转换图参见 点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FlyingZCC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值