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

本文详细介绍了Java多线程中的join()和yield()方法的使用场景与技巧。join()用于等待线程结束,确保主线程能获取到子线程的处理结果;而yield()则用于线程间的谦让,使线程可以主动释放CPU资源,提高程序运行效率。

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

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值