线程的让位yield与合并join

本文探讨了Java中线程的调度机制,重点讲解了yield方法如何实现线程间的主动让位,以及join方法用于线程合并的具体应用。通过实例代码展示了在特定条件下线程如何进行让位,以及如何使用join方法确保主线程等待子线程完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//这里要知道yield是一个静态让位方法,什么意思呢?当有两个优先级相同的线程时可以通过yield给另一个线程让位,你可以自定义让位的条件,但是让位的时间是不确定的,定义了让为条件后在该条件下一定会让位但同样有可能在其他条件下也会让位,下面是代码,当一个数能整出20时便让位给主线程,这个条件是一定会执行的,但是并不意味着一定是20的整数倍才让位。见代码:

package ThreadTest;

class Processor09 implements Runnable{
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=0; i<=100; i++){
			System.out.println(Thread.currentThread().getName() + "-->" + i);
			if(i%20 == 0){
				Thread.yield();
			}
		}
	}
}

public class ThreadTest09 {

	public static void main(String[] args) {
		
		Thread t = new Thread(new Processor09());
		t.setName("t");
		t.start();
		for(int i=0; i<=100; i++){
			System.out.println(Thread.currentThread().getName() + "-->" + i);
		}
	}
}

 

//下面是线程的合并,用的是join方法,这个方法是一个成员方法,当一个线程a用了该方法,该方法在那个线程中那么a和哪个线程合并,此时两个栈空间变成了一个栈空间。见代码:

package ThreadTest;

class Processor10 implements Runnable{
	@Override
	public void run() {
		// TODO Auto-generated method stub
	
		for(int i=0; i<5; i++){
			try {
				Thread.sleep(1000);
			} catch (Exception e) {
				// TODO: handle exception
			}
			System.out.println(Thread.currentThread().getName() + "-->" + i);
		}
	}
}

public class ThreadTest10 {

	public static void main(String[] args) throws InterruptedException {
		Thread t = new Thread(new Processor10());
		t.setName("T");
		t.start();
		t.join();
		for(int i=0; i<10; i++){
			System.out.println(Thread.currentThread().getName() + "-->" + i);
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值