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

来源:互联网 发布:免费采购软件有哪些 编辑:程序博客网 时间:2024/06/06 04:28

针对本格专题我们主要讨论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资源了,只是它占用的资源的优先级的变低了。



原创粉丝点击