作用:join()方法的作用是等待线程对象销毁。

    join()方法具有能使线程排队运行的作用,有点类似于同步的效果。
 
    join与synchronize的区别:
        join在内部使用wait()方法进行等待,底层用wait()来实现。
        synchronize关键字是以“对象监视器”为原理做同步操作。
 
    join()除了无参方法之外,还重载了join(毫秒)的方法,此方法与sleep(毫秒)的区别是:
        join()操作底层用wait()来实现,可以释放锁。
        sleep()不会释放锁。
 
join()释放锁的demo:
    线程类A:
  1. package com.wang.myjoin;
  2. publicclassThreadAextendsThread{
  3. privateThreadB threadB;
  4. publicThreadA(ThreadB threadB){
  5. this.threadB = threadB;
  6. }
  7. @Override
  8. publicvoid run(){
  9. synchronized(threadB){
  10. threadB.start();
  11. try{
  12. threadB.join();
  13. }catch(InterruptedException e1){
  14. e1.printStackTrace();
  15. }
  16. for(int i =0;i<10000;i++){
  17. System.out.println("b do sth....");
  18. }
  19. }
  20. }
  21. }
线程类B:
  1. package com.wang.myjoin;
  2. publicclassThreadBextendsThread{
  3. @Override
  4. publicvoid run(){
  5. System.out.println("B thread is run.");
  6. try{
  7. Thread.sleep(2000);
  8. }catch(InterruptedException e){
  9. e.printStackTrace();
  10. }
  11. System.out.println("B thread is over.");
  12. }
  13. publicsynchronizedvoid myService(){
  14. for(int i =0;i<100;i++){
  15. System.out.println("myService do sth."+ i);
  16. }
  17. }
  18. }
线程类C:
  1. package com.wang.myjoin;
  2. publicclassThreadCextendsThread{
  3. privateThreadB threadB;
  4. publicThreadC(ThreadB threadB){
  5. this.threadB = threadB;
  6. }
  7. @Override
  8. publicvoid run(){
  9. threadB.myService();
  10. }
  11. }
测试类:
  1. package com.wang.myjoin;
  2. publicclassJoinTest{
  3. publicstaticvoid main(String[] args){
  4. ThreadB threadB =newThreadB();
  5. ThreadA threadA =newThreadA(threadB);
  6. threadA.start();
  7. ThreadC threadC =newThreadC(threadB);
  8. threadC.start();
  9. System.out.println("~~~我来测试一下~~~~");
  10. }
  11. }
输出结果:
  1. B thread is run.
  2. ~~~我来测试一下~~~~
  3. myService do sth.0
  4. myService do sth.1
  5. myService do sth.2
  6. .
  7. .
  8. .
  9. myService do sth.99
  10. B thread is over.
  11. b do sth....
  12. b do sth....
  13. .
  14. .
  15. .
可见线程在join()之后是释放锁的,其他线程可以访问同锁的synchronize方法。
      
需要注意的问题:join()后的方法有可能会提前运行:(这个没试出来)
    我们同时执行以下三个操作:
    ①.thread1.start();
    ②.thread2.start();
    ③.sysout
    哪个先运行是不确定的,不过①和②的操作是相同的锁,所以是互斥的。

多线程(七)~join方法的使用的更多相关文章

  1. 转载:Java多线程中join方法的理解

    转载自:http://uule.iteye.com/blog/1101994 thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A ...

  2. Java多线程中join方法详解

    join()方法用于让当前执行线程等待join线程执行结束.其实现原理是不停的检查join线程是否存活,如果join线程存活则让当前线程永远等待. join()方法部分实现细节 while(isAli ...

  3. Java多线程中join方法的理解

    thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. t.join( ...

  4. 多线程--Thread.join方法

    在Thread类的Api中,Join的作用是让当前线程等待目标线程结束之后才继续执行. thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.  比如在线程B ...

  5. [javaSE] 多线程(join方法)

    多条线程并发执行,随机切换,调用join()方法,会使当前线程所在的线程(一般主线程)冻结,直到当前线程结束,所在的线程才恢复继续执行 class JoinTestDemo implements Ru ...

  6. 并发编程之多线程基础-join方法及优先级(五)

    join()方法作用 当在主线程当中执行到t1.join()方法时,就认为主线程应该把执行权让给t1 优先级 现代操作系统基本采用时分的形式调度运行的线程,线程分配得到的时间片的多少决定了线程使用处理 ...

  7. Java多线程学习——join方法的使用

    join在线程里面意味着“插队”,哪个线程调用join代表哪个线程插队先执行——但是插谁的队是有讲究了,不是说你可以插到队头去做第一个吃螃蟹的人,而是插到在当前运行线程的前面,比如系统目前运行线程A, ...

  8. 多线程中join方法的含义

    1.作用:调用这个方法的时候,主进程会在这里停住,等待该线程进行完毕再继续往下执行. 如:不使用join的情况: <?php class Join extends Thread { public ...

  9. Java多线程-join方法

    thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. 具体例子看链接 ...

  10. “全栈2019”Java多线程第七章:等待线程死亡join()方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

随机推荐

  1. [Microsoft] 微软技术平台的Cloud Building平台AppVeyor

    Link: http://www.tuicool.com/articles/uMBZba http://www.appveyor.com/ 随着云技术的不断完善,基于云的应用越发丰富起来.AppVey ...

  2. C. Enlarge GCD Codeforces Round #511 (Div. 2)【数学】

    题目: Mr. F has nn positive integers, a1,a2,…,an. He thinks the greatest common divisor of these integ ...

  3. SPOJ - FREQ2 莫队 / n^1.5logn爆炸

    题意:给定\(a[1...n]\)和\(Q\)次询问,每次统计\([L,R]\)范围内出现频率最高的数的次数 想法没啥好说的,分别统计该数出现的次数和次数出现的次数,然后莫队暴力 注意本题时间卡的很紧 ...

  4. [转] PuTTY + Xming 远程使用 Linux GUI

    [From] http://www.zw1840.com/blog/zw1840/2008/10/putty-xming-linux-gui.html By zw1840 on October 28, ...

  5. 利用paramiko的demo_simple.py进行日志记录时遇到的特殊字符

    特殊字符列表: 回车 "\r" "\x13" 响铃 "\x07" 换行 "\n" "\x10" &q ...

  6. 给python解释器本身添加注册表

    import sys from _winreg import * # tweak as necessary version = sys.version[:3] installpath = sys.pr ...

  7. 一键压测工具改造(locust)

    本文内容来自“天外归云”大神,原文链接http://www.cnblogs.com/LanTianYou/p/5987741.html,目前只对启动脚本做了一些改造,应该说是,不适用powershel ...

  8. CF 305B——Continued Fractions——————【数学技巧】

    B. Continued Fractions time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  9. MySQL中设置同一张表中一个字段的值等于另一个字段的值

    今天遇到了一个需求,我在一张表中新增了一个字段,因为这张表以前已经有很多数据了,这样对于以前的数据来说,新增的这个字段的值也就是为该字段的默认值,现在需要将新增的这个字段添加上数据,数据来源为同表的另 ...

  10. win10的xbox下载应用或者游戏时,出现0x80070422和0x80073D0A的解决办法

    这个错误:0x80070422是因为关闭了windows update这个服务导致的 这个错误:0x80073D0A是因为关闭了windows firewall这个服务导致的 具体操作: cmd下se ...