线程合并join方法和出让CPUyield方法

本文通过两个示例详细解析了Java中线程的join方法如何实现线程等待,以及yield方法如何在线程间进行调度。通过具体的代码示例展示了这两种方法的实际应用。

 1 关于join方法的意义,很多地方的表述为线程合并, 根据我的理解, 也可以解释为一个线程等待另一个线程执行结束后再继续执行.

  

    例如在这个主线程中,我有一个名为MyThread的线程类的mythread实例,  我在主线程的某个阶段需要等待mythread执行结束再执行(可能需要利用mythread)的执行结果,

那么就需要在主线程需要等待的地方加入mythread.join(),语句,具体代码如下:

  

package test;

import java.util.Date;

public class jointest {
	public static void main(String[]  args){
		Thread mythread = new MyThread();
		mythread.start();
		try{
			mythread.join();
		}catch(Exception e){
			
		}
		for(int i=0;i<10;i++){
			System.out.println("---"+new Date());
			
		}
	}

}
class MyThread extends Thread{
	public void run(){
		for(int i=0;i<10;i++){
			System.out.println(new Date());
			try{
				sleep(1000);
			}catch(InterruptedException e){
				return;
			}
		}
	}
}
结果为:

Fri Apr 04 14:42:41 CST 2014
Fri Apr 04 14:42:42 CST 2014
Fri Apr 04 14:42:43 CST 2014
Fri Apr 04 14:42:44 CST 2014
Fri Apr 04 14:42:45 CST 2014
Fri Apr 04 14:42:46 CST 2014
Fri Apr 04 14:42:47 CST 2014
Fri Apr 04 14:42:48 CST 2014
Fri Apr 04 14:42:49 CST 2014
Fri Apr 04 14:42:50 CST 2014
---Fri Apr 04 14:42:51 CST 2014
---Fri Apr 04 14:42:51 CST 2014
---Fri Apr 04 14:42:51 CST 2014
---Fri Apr 04 14:42:51 CST 2014
---Fri Apr 04 14:42:51 CST 2014
---Fri Apr 04 14:42:51 CST 2014
---Fri Apr 04 14:42:51 CST 2014
---Fri Apr 04 14:42:51 CST 2014
---Fri Apr 04 14:42:51 CST 2014
---Fri Apr 04 14:42:51 CST 2014

可以看到,本应并发执行的主线程和mythread,实际上等到mythread执行之后主线程的打印工作才开始.


再来看一个yield方法的例子.

这个例子中有两个MyThread对象,t1和t2 .

通过yield 方法, 让线程在某个条件时让出CPU.  从输出中可以看到, 当i被3整除时,  一个线程一定会切换到另一个线程

package test;

import java.util.Date;

public class jointest {
	public static void main(String[]  args){
		MyThread t1 = new MyThread("t1");
		MyThread t2 = new MyThread("t2");
		t1.start();t2.start();
		
		
	}

}
class MyThread extends Thread{
	MyThread (String s){
		super(s);
	}
	public void run(){
		for(int i=1;i<=100;i++){
			System.out.println(getName()+" "+i);
			
			if(i % 3 == 0){
				//System.out.println("---");
			
				yield();
			}
			
		}
	}
}

...
...
...//以上省略,t2尚未开始
t1 80
t1 81
t1 82
t1 83
t1 84
t1 85
t1 86
t1 87
t2 1
t2 2
t2 3
t1 88
t1 89
t1 90
t2 4
t2 5
t2 6
t1 91
t1 92
t1 93
t2 7
t2 8
t2 9
t1 94
t1 95
t1 96
t2 10
t2 11
t2 12
t1 97
t1 98
t1 99
t2 13
t2 14
t2 15
t1 100
t2 16
t2 17
t2 18
t2 19
t2 20
t2 21
t2 22
t2 23
t2 24
t2 25

从t2和t1 开始并发开始,每次被3整除都会发生切换



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值