java 线程协作 join方法

来源:互联网 发布:转行数据分析师 编辑:程序博客网 时间:2024/06/02 06:58

在实际开发中我们往往会遇到这样的情况一个线程的执行需要依赖另一个线程执行后的结果。即主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。

join()

join() 方法主要是让调用该方法的thread完成run方法里面的任务后, 再执行join()方法后面的代。

主线程生成并起动了子线程,而子线程里要进行大量的耗时的运算(这里可以借鉴下线程的作用),当主线程处理完其他的事务后,需要用到子线程的处理结果,这个时候就要用到join();方法了。

 

//该方法会无限等待,它会一直阻塞当前线程直到目标线程(调用该方法的线程)执行完毕。      join() 0

 

//该方法需要给出最大等待时间,如果目标线程的执行时间超过给定的时间,那么当前线程将不在等待目标线程执行结束而直接执行public final synchronized void join(long millis)throws InterruptedException{}

 

复制代码

   String  str=  = "进入"+Thread.currentThread().getName()+"线程"1000="hello Word"+"线程业务处理完毕"            System.out.println(Thread.currentThread().getName()+"线程处理业务开始""获取str值:"+

main线程处理业务开始
进入Thread-0线程
获取str值:null
Thread-0线程业务处理完毕

复制代码

  运行代码,貌似永远都看不到str的值是"hello Word",而每次都是null,原因很简单的,因为在thread中的run方法中对str进行赋值操作前休眠了1秒,此时main线程中的System.out.println方法已经执行了,所以很难看到str的值是"hello Word",为了看到str的值是"hello Word",我们的一个思路就是等thread运行结束之后,我们再执行System.out.println就可以了,这时候join方法的作用就显现出来的,我们把上面的注释代码删除注释,然后运行,不管运行多少次,输出的结果都是“hello Word”,从这个例子中我们就可以看到join方法的作用,它能够调节各个线程之间的运行顺序,从而可以实现同步。

  如果修改注释的代码为thread.join(100);则执行结果为:获取str值:null ,因为主线程已经等不及了。

 

join()他让调用线程在当前线程对象上进行等待当线程执行完毕后,被等待的线程会在推出前调用notifyAll()方法通知所有的等待线程继续执行。

复制代码

    public final synchronized void join(long millis) throws InterruptedException {        long base = System.currentTimeMillis();        long now = 0;        if (millis < 0) {            throw new IllegalArgumentException("timeout value is negative");        }        if (millis == 0) {            while (isAlive()) {                wait(0);            }        } else {            while (isAlive()) {                long delay = millis - now;                if (delay <= 0) {                    break;                }                wait(delay);                now = System.currentTimeMillis() - base;            }        }    }
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 胸肋关节韧带疼怎么办 三岁宝宝有点驼背怎么办 20多岁有点驼背怎么办 五岁宝宝有点驼背怎么办 孕妇腰扭了很痛怎么办 怀孕了腰扭了疼怎么办 小龙芭比扭腰机开机没有声音怎么办 高中生训练数学计算的准确性怎么办 跑步累了跑不动了怎么办 一跑步就岔气了怎么办 婴儿关节折邹发红怎么办? 打了借条人跑了怎么办 吃凉的胃不舒服怎么办 跑步机带子跑偏怎么办 在跑步机上摔倒怎么办 弯道以后就是直线行驶怎么办 跑步机的声音大怎么办 科二一直考不过怎么办 考科目三太紧张怎么办 科目三太紧张了怎么办 跑步慢怎么办怎样跑快 铣床铣得不直怎么办 考试的时候检测仪响怎么办 吸入腐蚀性气体导致嗓子疼怎么办 孕妇已做c13检查怎么办 静电除尘器绝缘子箱温度低怎么办 高中三角函数计算总算不对怎么办 江苏高考物理考d怎么办 高二化学学不好怎么办 中考最后一次月考下滑怎么办 物联网卡网速慢怎么办 机械表长时间不带不走了怎么办 高中档案有涂改痕迹怎么办 大学平时成绩为0怎么办 电大英语考试成绩取消了怎么办 网贷评分不足要怎么办 学业水平广东1c怎么办 绣花机速度太慢怎么办 娃脖子有点烂了怎么办 7月省内流量套餐怎么办 qq手游授权失败怎么办