线程礼让

线程礼让

线程的礼让是指先将资源让出去让别的线程先执行。线程的礼让可以使用Thread中提供的方法:

  • 礼让:public static void  yield();

范例:没使用礼让的操作

package multithreading;

public class Comity {
	public static void main(String[] args) throws InterruptedException {
		Thread thread = new Thread(()->{
			for (int i = 0; i < 20; i++) {
				try { 
					Thread.sleep(500);    //线程休眠
				} catch (InterruptedException e) {
					// TODO 自动生成的 catch 块
					e.printStackTrace();
				}
				System.out.println(Thread.currentThread().getName()+ "执行、i = "+i);
			}
		},"线程对象");
		thread.start();
		for(int x = 0;x < 20;x++) {
			Thread.sleep(500);
			System.out.println("【main线程】 x =" + x);	
		}
	}
}

【main线程】 x =0
线程对象执行、i = 0
线程对象执行、i = 1
【main线程】 x =1
线程对象执行、i = 2
【main线程】 x =2
【main线程】 x =3
线程对象执行、i = 3
【main线程】 x =4
线程对象执行、i = 4
线程对象执行、i = 5
【main线程】 x =5
【main线程】 x =6
线程对象执行、i = 6
线程对象执行、i = 7
【main线程】 x =7
线程对象执行、i = 8
【main线程】 x =8
线程对象执行、i = 9
【main线程】 x =9
线程对象执行、i = 10
【main线程】 x =10
线程对象执行、i = 11
【main线程】 x =11
线程对象执行、i = 12
【main线程】 x =12
线程对象执行、i = 13
【main线程】 x =13
线程对象执行、i = 14
【main线程】 x =14
线程对象执行、i = 15
【main线程】 x =15
线程对象执行、i = 16
【main线程】 x =16
线程对象执行、i = 17
【main线程】 x =17
线程对象执行、i = 18
【main线程】 x =18
线程对象执行、i = 19
【main线程】 x =19

范例:使用礼让的操作

package multithreading;

public class Comity {
	public static void main(String[] args) throws InterruptedException {
		Thread thread = new Thread(()->{
			for (int i = 0; i < 20; i++) {
				if(i % 3 == 0) {
					Thread.yield();//线程礼让,让其他抢占同一资源的线程先执行
					System.out.println("。。。线程礼让。。。");
				}
				try {
					Thread.sleep(500);
				} catch (InterruptedException e) {
					// TODO 自动生成的 catch 块
					e.printStackTrace();
				}
				System.out.println(Thread.currentThread().getName()+ "执行、i = "+i);
			}
		},"线程对象");
		thread.start();
		for(int x = 0;x < 20;x++) {
			Thread.sleep(500);
			System.out.println("【main线程】 x =" + x);	
		}
	}
}

 。。。线程礼让。。。
【main线程】 x =0
线程对象执行、i = 0
【main线程】 x =1
线程对象执行、i = 1
【main线程】 x =2
线程对象执行、i = 2
。。。线程礼让。。。
【main线程】 x =3
线程对象执行、i = 3
【main线程】 x =4
线程对象执行、i = 4
【main线程】 x =5
线程对象执行、i = 5
。。。线程礼让。。。
【main线程】 x =6
线程对象执行、i = 6
线程对象执行、i = 7
【main线程】 x =7
【main线程】 x =8
线程对象执行、i = 8
。。。线程礼让。。。
【main线程】 x =9
线程对象执行、i = 9

...

礼让执行的时候每一次调用yield()方法都只会礼让一次当前的资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值