Java线程之join
简述
Thread类的join方法用来使main线程进入阻塞状态,进而等待调用join方法的线程执行,join有三个重载方法:
public final void join()
使主线程进入阻塞状态,直到调用join的线程执行完成,如果线程被中断将抛出InterruptedException异常
public final synchronized void join(long millis):
使主线程最多阻塞指定时间(毫秒)
public final synchronized void join(long millis, int nanos)
使主线程最多阻塞指定时间(毫秒),可以精确到纳秒
实例
主线程等待所有子线程先执行完成
package com.lkf.mulithread;
public class ThreadJoinExample {
public static void main(String[] args) {
Thread t1 = new Thread(new MyRunnable(), "线程t1");
Thread t2 = new Thread(new MyRunnable(), "线程t2");
Thread t3 = new Thread(new MyRunnable(), "线程t3");
t1.start();
//两秒钟以后启动第二个线程
try {
t1.join(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
t2.start();
//第一个线程完成之后启动第三个线程
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
t3.start();
//三个子线程先执行完,然后继续主线程
try {
t1.join();
t2.join();
t3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("所有线程执行完毕");
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Thread started:::" + Thread.currentThread().getName());
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread ended:::" + Thread.currentThread().getName());
}
}
结果:
Thread started:::线程t1
Thread started:::线程t2
Thread ended:::线程t1
Thread started:::线程t3
Thread ended:::线程t2
Thread ended:::线程t3
所有线程执行完毕
Java线程之join的更多相关文章
- 多线程之join方法
join方法的功能就是使异步执行的线程变成同步执行.也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方 ...
- Java线程之 InterruptedException 异常
Java线程之 InterruptedException 异常 当一个方法后面声明可能会抛出InterruptedException 异常时,说明该方法是可能会花一点时间,但是可以取消的方法. 抛 ...
- java基础---->java多线程之Join(二)
如果主线程想等待子线程执行完成之后再结束,就可以使用join方法了.它的使用是等待线程对象销毁.今天我们就通过实例来学习一下多线程中join方法的使用.草在结它的种子,风在摇它的叶子.我们站着,不说话 ...
- Java多线程之join
1.join方法只有在继承了Thread类的线程中才有. 2.线程必须要start() 后再join才能起作用. 将另外一个线程join到当前线程,则需要等到join进来的线程执行完才会继续执行当前线 ...
- Java多线程之Join方法阻塞线程
package org.study2.javabase.ThreadsDemo.status; /** * @Auther:GongXingRui * @Date:2018/9/19 * @Descr ...
- java多线程之join方法使用
看这篇博客:http://www.cnblogs.com/skywang12345/p/3479275.html
- Java线程之synchronized
翻译:https://www.journaldev.com/1061/thread-safety-in-java 我们知道线程安全在Java中是一个非常重要的主题,当多个线程操作共享数据时,如果没有任 ...
- java 线程之executors线程池
一.线程池的作用 平时的业务中,如果要使用多线程,那么我们会在业务开始前创建线程,业务结束后,销毁线程.但是对于业务来说,线程的创建和销毁是与业务本身无关的,只关心线程所执行的任务.因此希望把尽可能多 ...
- java 线程之concurrent中的常用工具 CyclicBarrier
一.CyclicBarrier CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序 ...
随机推荐
- shell使用ps -ef|grep xxx时不显示grep xxx进程的方法
在使用ps -ef|grep xxx时会将grep xxx的进程也带出来, 而在脚本中如果想要截取此命令结果的一部分,则grep xxx的进程会显得多余,如下: [root@localhost ~]# ...
- javabean转成json字符首字母大写
今天写接口的时候有个需求将接口返回的json字符串首字母大写:{"SN":"","Result":""}格式, 只需要在 ...
- QT版本下载链接
http://download.qt.io/archive/qt/
- DbHelper简单的使用
using System; using System.Windows.Forms; using System.Data.SqlClient; namespace WindowsFormsApp3 { ...
- 通过mysql 连接远程数据库时,输入密码后,提示10060错误
能提示输入密码,说明网络能够连接,而且能连到服务器.输入密码后提示错误,说明应该是权限问题 解决方法: 一.进入mysql数据库命令行 二.输入use mysql; 三.设置root账号密码为1 ...
- dedecms:限制栏目列表生成的最大页数防止被采集
dedecms:限制栏目列表生成的最大页数防止被采集 如果您的网站数据量较大,列表很多的话甚至达到上千页,生成列表时就特别耗费时间,这个缺点可以被优化掉:网站好不容易建起来,担心网站内容被采集走,如果 ...
- 一周死磕fastreport ----ASP.NET (二)
前一章忘了为什么要死磕fastreport 了,这次简单说一下, 公司本来有一个winfrom 窗体打印程序,可是上司觉得太麻烦了,(前几天 我一直在做web版看板,然后发现还不错,于是 想把公 ...
- cas多方式登录相关知识点的总结
知识点: cas多表单登录(在用户名,密码的基础上,增加短信验证码登录) 自定义认证策略 自定义字段添加为空校验的错误信息 Controller层接口的调用 一:场景 项目涉及到的业务是,在原cas用 ...
- JavaScript(JS)入门篇
<script type="text/javascript"> 表示在<script></script>之间的是文本类型(text),javas ...
- linux基础_vi和vim快捷键
(1)拷贝当前行 yy,拷贝当前行向下5行 5yy,并粘贴. (2)删除当前行 dd, 删除当前行向下的5行 5dd. (3)在文件中查找某个单词.[在命令行下使用 /+关键字,回车查找,输入n就是查 ...