博客
关于我
Java高并发系列(读书笔记)——等待线程结束(join)和谦让(yield)
阅读量:265 次
发布时间:2019-03-01

本文共 1516 字,大约阅读时间需要 5 分钟。

join


/**     * 表示无限等待,它会一直阻塞当前线程,直到目标线程执行完毕.     */    public final void join()throws InterruptedException    /**     * 如果超过给定时间目标线程还在执行,当前线程也会因为"等不及",而继续往下执行     * @param millis 最大等待时间     */    public final synchronized  void join(long millis) throws InterruptedException

下面是JDK中join()方法实现的核心代码片段

while (isAlive()){        wait(0);}

该方法强调让调用线程在当前线程对象上进行等待。当线程执行完成后,被等待的线程会在退出前调用notifyAll()方法通知所有的等待线程继续执行。也行这样解释有点抽象了,下面用代码解释一下。

public class JoinMain {       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 at = new AddThread();        at.start();        at.join();        //at.join(20);        System.out.println(i);    }}

上面这个创建的线程很简单,就是循环10000000并且每次循环 i 都加一。在主函数中如果不调用at.join()方法等待AddThread线程,那么得到的 i 很可能是0或一个非常小的数。因为AddThread还没开始执行, i 的值就已经被输出了。相对应的,如果给join()传入的等待时间过小的话,同样也是会因为等待时间太小使 i 无法循环10000000。

举个例子,下课时老师布置了作业,但要求下节课上课时就要完成作业上交(假设作业很多的话),那毫无疑问肯定是完成不了或者只能完成一点,但如果老师说到时候(没有时间期限)写完后在上交,那肯定可以完成作业的。这里的话同学完成布置的作业就相当于上面代码中的AddThrea线程,老师上交作业没有期限完成了上交即可也就相当于给该线程调用join()方法。


Thread.yield()


定义如下

public static native void yield();

这是一个静态方法,一旦执行,它会使当前线程让出CPU。但要注意,让出CPU并不表示当前线程不执行,当前线程在让出CPU后,还会进行CPU资源的争夺,但是否能够再次别分配到就不一定了

因此,对于Thread.yield()的调用就好像是说:"我已经完成了一些最重要的工作了,我可以休息一下,可以给其他线程一些工作机会"

如果你觉得当前线程不那么重要,或者优先级非常低,而且害怕它会占用太多的CPU资源,那么就可以在适当的时候调用该方法,给予其他重要线程更多的工作机会。

转载地址:http://lqjo.baihongyu.com/

你可能感兴趣的文章
【调剂】华侨大学媒体分析与数据挖掘小组招收学硕调剂生
查看>>
分数线385!平均分399!985大学计算机的真正“实力”!
查看>>
【调剂】211云南大学2020年硕士研究生招生调剂通知
查看>>
【调剂】985复旦大学类脑智能科学与技术研究院硕士研究生招生接收校内调剂考生工作细则...
查看>>
【调剂】沈阳航空航天大学2020年硕士研究生调剂信息
查看>>
清华大学来山东了,成立新研究院!
查看>>
最新!薪酬最高的大学本科专业公布!
查看>>
2021考研数学,如何利用错题高效拿分?
查看>>
报录比48:1,上海985同济大学去年计算机考研报录比好高!
查看>>
引热议!这些高校开学后封闭式管理
查看>>
【调剂】上海应用技术大学2021年硕士研究生招生考试调剂信息
查看>>
【调剂】沈阳理工大学 环境科学与工程,材料与化工、化学工程与技术,有调剂名额,相关专业可跨专业...
查看>>
2021QS计算机专业排名发布:MIT斯坦福霸榜,清华北大进入前20
查看>>
wxpython配合MySQL数据库完成用户登录页面的设计
查看>>
JavaScript学习手册(45)
查看>>
【纪中2020.5.2日】模拟赛题解
查看>>
【纪中2020.5.06日】模拟赛题解
查看>>
eclipse中server location灰色解决
查看>>
idea 写web项目图片不显示
查看>>
实用网站推荐
查看>>