t.join();表示当前线程停止执行直到t线程运行完毕;

t.join(1000); 表示当前线程等待t线程运行1000后执行;

package org.thread;/*** t.join()表示当前线程停止执行直到t线程运行完毕* t.join(1000);表示当前线程等待t线程运行1000后执行* @author **/
public class JoinTestDemo2 {public static void main(String[] args) throws InterruptedException{//Delay,in milliseconds before we interrupt MessageLoop//thread(default one hour)long patience = 1000 * 60 * 60;//if command line argument present,gives patience insecondsif(args.length>0){try {patience = Long.parseLong(args[0])*1000;} catch (Exception e) {System.out.println("Argument must be a integer");System.exit(1);}}threadMessage("start MessageLoop thread");long startTime = System.currentTimeMillis();Thread t = new Thread(new MessageLoop());t.start();threadMessage("waiting for messageLoop thread to finish");//loop until MessageLoop thread exitswhile(t.isAlive()){threadMessage("still waiting");//wait maxium of 1 second for MessageLoop thread to finish t.join(); //t.join(1000);if (((System.currentTimeMillis() - startTime) > patience) &&t.isAlive()){threadMessage("Tired of waiting!");t.interrupt();//Should't be long now --wait indefinitelyt.join();}}threadMessage("Finally!");}/*Create a new instance of Test*/public JoinTestDemo2(){}/*Display a message,preceded by the name of the current thread*/static void threadMessage(String message){String threadName = Thread.currentThread().getName();System.out.format("%s:%s%n",threadName,message);}private static class MessageLoop implements Runnable{@Overridepublic void run() {String importantInfo[] = {"Mares eat oats","Does eat oats","Little lambs eat ivy","A kid will eat ivy too"};try {for(int i = 0;i<importantInfo.length;i++){//Pause for 4 secondsThread.sleep(4000);//print a messagethreadMessage(importantInfo[i]);}} catch (Exception e) {threadMessage("I was't done!");}}}}

上述不同代码的运行结果:

颜色对应

init:
deps-jar:
Compiling 1 source file to D:/test/desPatten/build/classes
compile-single:
run-single:
main: Starting MessageLoop thread
main: Waiting for MessageLoop thread to finish
main: Still waiting...
Thread-0: Mares eat oats
Thread-0: Does eat oats
Thread-0: Little lambs eat ivy
Thread-0: A kid will eat ivy too
main: Finally!
生成成功(总时间:17 秒)

init:
deps-jar:
Compiling 1 source file to D:/test/desPatten/build/classes
compile-single:
run-single:
main: Starting MessageLoop thread
main: Waiting for MessageLoop thread to finish
main: Still waiting...
main: Still waiting...
main: Still waiting...
main: Still waiting...
Thread-0: Mares eat oats
main: Still waiting...
main: Still waiting...
main: Still waiting...
main: Still waiting...
Thread-0: Does eat oats
main: Still waiting...
main: Still waiting...
main: Still waiting...
main: Still waiting...
Thread-0: Little lambs eat ivy
main: Still waiting...
main: Still waiting...
main: Still waiting...
main: Still waiting...
Thread-0: A kid will eat ivy too
main: Finally!
生成成功(总时间:17 秒)

java 多线程之join相关推荐

  1. JAVA多线程之wait/notify

    本文主要学习JAVA多线程中的 wait()方法 与 notify()/notifyAll()方法的用法. ①wait() 与 notify/notifyAll 方法必须在同步代码块中使用 ②wait ...

  2. Java多线程之Callable、Future和FutureTask

    Java多线程之Callable接口 自己想总结一下的,看到一篇总结的更好的博客,就转载了,突然感觉真轻松,哈哈哈哈 文章转载于:Matrix海子:Java并发编程:Callable.Future和F ...

  3. Java多线程之Synchronized和Lock的区别

    Java多线程之Synchronized和Lock的区别 目录: 原始构成 使用方法 等待是否可以中断 加锁是否公平 锁绑定多个条件Condition 小结:Lock相比较Synchronized的优 ...

  4. Java多线程之CAS缺点

    Java多线程之CAS缺点 目录: 循环时间开销很大 只能保证一个共享变量的原子操作 引来ABA问题及解决方案(重点) 1. 循环时间开销很大 通过看源码,我们发现有个do while,如果CAS失败 ...

  5. Java多线程之CAS深入解析

    Java多线程之CAS深入解析 目录: CAS是什么 CAS底层原理Unsafe深入解析 CAS缺点 引子:蚂蚁花呗一面:讲一讲AtomicInteger,为什么要用CAS而不是synchronize ...

  6. Java多线程之volatile详解

    Java多线程之volatile详解 目录: 什么是volatile? JMM内存模型之可见性 volatile三大特性之一:保证可见性 volatile三大特性之二:不保证原子性 volatile三 ...

  7. Java多线程之Semaphore用法

    Java多线程之Semaphore用法 本文目录: Semaphore基本概念 Semaphore使用案例:3个停车位,6辆车去抢,走一辆,抢一个停车位. 1. Semaphore基本概念 在信号量上 ...

  8. Java多线程之CyclicBarrier用法

    Java多线程之CyclicBarrier用法 本文目录 CyclicBarrier的基本概念 CyclicBarrier的案例:集齐7颗龙珠就可以召唤神龙 1. CyclicBarrier的基本概念 ...

  9. Java多线程之CountDownLatch用法

    Java多线程之CountDownLatch用法 本文目录: CountDownLatch基本概念 CountDownLatch案例:6个同学陆续离开教室后班长才可以关门 CountDownLatch ...

最新文章

  1. Py之pycocotools:pycocotools库的简介、安装、使用方法之详细攻略
  2. Android学习笔记---22_访问通信录中的联系人和添加联系人,使用事物添加联系人...
  3. 中国水痘带状疱疹感染治疗药物市场趋势报告、技术动态创新及市场预测
  4. FFmpeg总结(十三)用ffmpeg基于nginx实现直播功能,推流拉流
  5. 教你用python爬虫下载1w+『ppt模板』
  6. 什么是MIMO(多输入多输出),以及MIMO的分类和测试(一)
  7. 【drawio笔记】在drawio中添加数学公式
  8. Android sim卡 pin码解锁流程.
  9. Postman做接口测试设置断言
  10. 中国医科大学2021年12月《五官科护理学》作业考核试题
  11. 混合波束成形|重叠子阵结构下的HBF探讨
  12. Excel中F4键的作用
  13. AWS 上的云原生 Jenkins
  14. openssl制作证书全过程
  15. Pulsar 社区周报 2020-09-12 ~ 09-18
  16. CString和LPVOID的转换(线程参数传递) .
  17. 大数据最重要的算法是什么,最常用的算法有哪些?
  18. OKR文化:明确职责与庆功会
  19. 华兴数控g71外圆循环编程_用G71粗车循环的举例——数控车床编程实例
  20. win7 64位系统PSD缩略图补丁预览PSD Mystic Thumbs免费版

热门文章

  1. #第五章“拷问”既往的股市理论5.1有人情味的“拷问”
  2. centos7下vim的开箱使用与简单配置分享
  3. SAP 常见英语 对应中文翻译
  4. Python爬虫--爬取妹子网
  5. 每日安全简讯20160719
  6. i5 11320h怎么样 相当于什么水平
  7. 国外最有价值的教育科技公司 Byju‘s
  8. 数据结构中ElemType是什么意思
  9. 显示器AutoColor原理(TSUM系列芯片)
  10. SQL关系代数——除法