线程礼让

线程礼让

线程的礼让是指先将资源让出去让别的线程先执行。线程的礼让可以使用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
    评论
好的,我了解了您的要求和问题。下面是我对您的问题的回答: 您可以按照以下步骤实现线程礼让的模拟跑步程序: 1. 创建两个线程对象,一个名为张三,一个名为李四。 2. 在每个线程对象的“run”方法中循环遍历10次,模拟每个人跑10圈。 3. 在循环体内,使用“Thread.yield()”让当前线程礼让出一次执行权,以便让另一个线程可以先跑一圈。 4. 在每次跑圈时,输出该线程的名字和完成的圈数。 下面是一个可能的实现,供您参考: ```python import threading class Runner(threading.Thread): def __init__(self, name, other): super().__init__() self.name = name self.other = other self.circles = 0 def run(self): while self.circles < 10: # 等待另一个线程先跑一圈 self.other.join() # 跑一圈 self.circles += 1 print(self.name, "跑完了第", self.circles, "圈") # 让出执行权,礼让其他线程运行 threading.Thread.yield() # 开始下一圈 self.other.start() zhangsan = Runner("张三", None) lisi = Runner("李四", zhangsan) zhangsan.other = lisi zhangsan.start() lisi.start() ``` 在这个程序中,创建了两个“Runner”对象,一个代表张三,一个代表李四。在“zhangsan”的“run”方法中,先等待“lisi”线程跑一圈,再跑一圈,让出执行权,等待“lisi”线程再次运行。在“lisi”线程中也是一样的操作,不停地交替着跑圈,实现了线程礼让的效果。 希望这个回答能够帮助您解决问题。如果还有其他问题或者不懂的地方,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值