join的使用

1 述

  • 在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束。这时,如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据中的值,就要用到join()方法了。
  • 方法join()的作用是等待线程对象销毁。
  • 方法join的作用是使所属的线程对象x正常执行run()方法中的任务,而使当前线程z进行无限期的阻塞,等待线程x销毁后再继续执行线程z后面的代码。
  • 方法join具有使线程排队运行的作用,有些类似同步的运行效果。
    try {
        MyThread threadTest = new MyThread();
        threadTest.start();
        threadTest.join();
        System.out.println("我想当threadTest对象执行完毕后我再执行,我做到了");
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

2 join与synchronized的区别

  • join与synchronized的区别是:join在内部使用wait()方法进行等待,而sychronized关键字使用的是“对象监视器”原理做为同步。

3 注意

  • 在join过程中,如果当前线程对象被中断,则当前线程出现异常。说明方法join()与interrupt()方法如果彼此遇到,则会出现异常。但进程按钮还呈“红色”,原因是线程ThreadA还在继续运行,线程ThreadA并未出现异常,是正常执行的状态。

4 join(long)的使用

  • 方法join(long)中的参数是设定等待的时间。当执行wait(long)方法后,当前线程的锁被释放,那么其他线程就可以调用此线程中的同步方法了。
  • Thread.sleep(long)方法却不释放锁。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • join用于多表中字段之间的联系,在数据库的DML (数据操作语言,即各种增删改查操作)中有着重要的作用。 合理使...
    登高且赋阅读 20,611评论 0 14
  • 背景:在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束。...
    Ferrari1001阅读 283评论 0 0
  • 一些数据库之间是存在关联的,编写一个JOIN可以联结多个不同的数据库。 数据库规范化 在创建数据库时,一定要思考下...
    夏威夷的芒果阅读 1,249评论 0 2
  • 最近一直忙着写SQLAlchemy的教程,但是在看到关系查询时,需要引入join的概念。也只怪的当初数据库没有学好...
    治部少辅阅读 17,043评论 6 37
  • 一年又一年,匆匆过去。回望过去,留下了什么?然过去的终已成为过去。生活依旧不会停歇前进的步伐。 当一个人开始时常怀...
    晓茵阅读 551评论 2 4