java 多线程之join
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相关推荐
- JAVA多线程之wait/notify
本文主要学习JAVA多线程中的 wait()方法 与 notify()/notifyAll()方法的用法. ①wait() 与 notify/notifyAll 方法必须在同步代码块中使用 ②wait ...
- Java多线程之Callable、Future和FutureTask
Java多线程之Callable接口 自己想总结一下的,看到一篇总结的更好的博客,就转载了,突然感觉真轻松,哈哈哈哈 文章转载于:Matrix海子:Java并发编程:Callable.Future和F ...
- Java多线程之Synchronized和Lock的区别
Java多线程之Synchronized和Lock的区别 目录: 原始构成 使用方法 等待是否可以中断 加锁是否公平 锁绑定多个条件Condition 小结:Lock相比较Synchronized的优 ...
- Java多线程之CAS缺点
Java多线程之CAS缺点 目录: 循环时间开销很大 只能保证一个共享变量的原子操作 引来ABA问题及解决方案(重点) 1. 循环时间开销很大 通过看源码,我们发现有个do while,如果CAS失败 ...
- Java多线程之CAS深入解析
Java多线程之CAS深入解析 目录: CAS是什么 CAS底层原理Unsafe深入解析 CAS缺点 引子:蚂蚁花呗一面:讲一讲AtomicInteger,为什么要用CAS而不是synchronize ...
- Java多线程之volatile详解
Java多线程之volatile详解 目录: 什么是volatile? JMM内存模型之可见性 volatile三大特性之一:保证可见性 volatile三大特性之二:不保证原子性 volatile三 ...
- Java多线程之Semaphore用法
Java多线程之Semaphore用法 本文目录: Semaphore基本概念 Semaphore使用案例:3个停车位,6辆车去抢,走一辆,抢一个停车位. 1. Semaphore基本概念 在信号量上 ...
- Java多线程之CyclicBarrier用法
Java多线程之CyclicBarrier用法 本文目录 CyclicBarrier的基本概念 CyclicBarrier的案例:集齐7颗龙珠就可以召唤神龙 1. CyclicBarrier的基本概念 ...
- Java多线程之CountDownLatch用法
Java多线程之CountDownLatch用法 本文目录: CountDownLatch基本概念 CountDownLatch案例:6个同学陆续离开教室后班长才可以关门 CountDownLatch ...
最新文章
- Py之pycocotools:pycocotools库的简介、安装、使用方法之详细攻略
- Android学习笔记---22_访问通信录中的联系人和添加联系人,使用事物添加联系人...
- 中国水痘带状疱疹感染治疗药物市场趋势报告、技术动态创新及市场预测
- FFmpeg总结(十三)用ffmpeg基于nginx实现直播功能,推流拉流
- 教你用python爬虫下载1w+『ppt模板』
- 什么是MIMO(多输入多输出),以及MIMO的分类和测试(一)
- 【drawio笔记】在drawio中添加数学公式
- Android sim卡 pin码解锁流程.
- Postman做接口测试设置断言
- 中国医科大学2021年12月《五官科护理学》作业考核试题
- 混合波束成形|重叠子阵结构下的HBF探讨
- Excel中F4键的作用
- AWS 上的云原生 Jenkins
- openssl制作证书全过程
- Pulsar 社区周报 2020-09-12 ~ 09-18
- CString和LPVOID的转换(线程参数传递) .
- 大数据最重要的算法是什么,最常用的算法有哪些?
- OKR文化:明确职责与庆功会
- 华兴数控g71外圆循环编程_用G71粗车循环的举例——数控车床编程实例
- win7 64位系统PSD缩略图补丁预览PSD Mystic Thumbs免费版