您的位置:首页 > 编程语言 > Java开发

Java高并发--等待线程结束和谦让

2017-09-27 07:22 253 查看
针对本格专题我们主要讨论join()和yield()这两个方法。

一、等待线程结束

如果我们想要在一个线程中获取到另外一个线程的处理结果,那么 这个时候我们该怎么办呢?最好的方式当然就是等待另一个线程的结束后再来执行当前线程,这个时候就该我们的join()方法上场了。

注意:这个方法一共有两个重载方法,传入了时间参数的重载方法表示等待固定的时间,如果在等待的时间结束后等待的线程还没有执行完,这个时候就不管了,依然执行自己的线程。另外一个没有时间参数的就是无限制的等待下去。具体使用方法如下:

public class JoinAndYield {
public volatile static int i = 0;
public static class AddThread extends Thread{
@Override
public void run(){
for(i=0;i<10000000;i++);
}
}
public static void main(String[] args) throws InterruptedException {
AddThread addThread = new AddThread();
addThread.start();
addThread.join();
System.out.printf("i = "+i);

}
}上面的代码的执行结果如下:
i = 10000000针对上面的执行结果,我们如果去掉join()方法这行代码,就会发现执行结果是i=0。因为这个结果并没有等待线程addThread执行完才执行,所以获取到的结果i没有是1000000。
二、谦让

在一个线程要结束或者结束的时候,如果它觉得自己不再需要cpu资源,这个时候就可以调用yield()方法来降低自己的优先级,从而可以把cpu资源让出给其他线程,但是这个时候并不意味之当前线程就不需要cpu资源了,只是它占用的资源的优先级的变低了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: