Java多线程【Thread的两个静态方法:sleep() 和 yield()】作用!

字面意思理解:
sleep 睡眠,睡觉
yield 让步,让路

sleep() 和 yield() 是 Thread 类中的两个静态方法

sleep()

作用: 使当前线程进入睡眠状态,让出 CPU 的执行权,不释放持有的锁。

语法: static void sleep(long millis) 或 static void sleep(long millis, int nanos)

参数:
millis:睡眠时间的毫秒数。
nanos:睡眠时间的纳秒部分,范围是 0 到 999999。
异常: InterruptedException - 如果任何线程中断了当前线程。

sleep() 适用于需要让线程睡眠一段时间的情况,例如定时任务、延时执行等

try {
	// 睡眠1秒
    Thread.sleep(1000); 
} catch (InterruptedException e) {
    e.printStackTrace();
}

yield() 基本不怎么用

作用: 暂停当前正在执行的线程对象,并执行其他线程。它只是将线程从运行状态转为就绪状态,让系统重新调度。

语法: static void yield()

注意: yield() 方法不会释放锁,仅仅是让出 CPU 的执行权,使得线程重新处于就绪状态,等待系统重新调度。

package com.jdw.java8.thread;

public class YieldExample {

	private static int T1_COUNT = 0;
	private static int T2_COUNT = 0;

	public static void main(String[] args) throws InterruptedException {

		Thread t1 = new Thread(() -> {
			for (int i = 0; i < 10000; i++) {
				// 加锁,保证 T1_COUNT 的原子性
				synchronized (YieldExample.class) {
					T1_COUNT++;
				}
				// yield方法释放了CPU的执行权,但是依然保留了CPU的执行资格,给其它线程一个重新争抢的机会
				Thread.yield();
			}
		});

		Thread t2 = new Thread(() -> {
			for (int i = 0; i < 10000; i++) {
				// 加锁,保证 T2_COUNT 的原子性
				synchronized (YieldExample.class) {
					T2_COUNT++;
				}
			}
		});

		t1.start();
		t2.start();

		// 关键是我们不要t1.join(),因为出让执行权。只阻塞t2线程,看相同时间内,t1和t2执行次数
		t2.join();

		System.out.println("t1 == :" + T1_COUNT); // 256
		System.out.println("t2 == :" + T2_COUNT); // 10000
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值