thread1.join()方法阻塞调用此方法的线程,直到线程thread1完成,此线程再继续。

通常用于在main()主线程内,等待其它线程完成再结束main()主线程

    @Test
/**
* output:
* 01234 main end.
* 如果注释掉【标记1】:
* main end.01234
*/
public void test06(){
class Task implements Runnable{
public void run() {
for(int i=0;i<5;i++){
System.out.print(i);
}
}
}
Thread thread1=new Thread(new Task());
thread1.start();
try {
thread1.join(); //标记1
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print("\tmain end.");
}

线程调用thread1.join()时,必须能够拿到线程thread1对象的锁。

@Test
/**
* output:
* 占用线程
TaskA run:0
TaskA run:1
TaskA run:2
TaskA run:3
TaskA run:4
释放线程
TaskA run:5
TaskA run:6
TaskA run:7
TaskA run:8
TaskA run:9
main end.
*/
public void test07(){
class TaskA implements Runnable{
public void run() {
for(int i=0;i<10;i++){
System.out.println("TaskA run:"+i);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class TaskB implements Runnable{
Thread thread;
public TaskB(Thread thread) {
this.thread=thread;
}
public void run() {
synchronized(thread){
try {
System.out.println("占用线程");
TimeUnit.SECONDS.sleep(5);
System.out.println("释放线程");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Thread t1=new Thread(new TaskA());
Thread t2=new Thread(new TaskB(t1));
t2.start();
t1.start();
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main end.");
}

t2通过synchronized(thread) 获取线程对象t1的锁并TimeUnit.SECONDS.sleep(5)后释放,
再此之前main方法调用t1.join(),因为获得不了t1的对象锁所以阻塞,
当t2释放了t1锁后,main线程join()方法,再等待t1线程执行完成后结束

java Thread.join()的更多相关文章

  1. [译]Java Thread join示例与详解

    Java Thread join示例与详解 Java Thread join方法用来暂停当前线程直到join操作上的线程结束.java中有三个重载的join方法: public final void ...

  2. Java Thread join() 的用法

    Java Thread中, join() 方法主要是让调用改方法的thread完成run方法里面的东西后, 在执行join()方法后面的代码.示例: class ThreadTesterA imple ...

  3. Java Thread.join的作用和原理

    很多人对Thread.join的作用以及实现了解得很少,毕竟这个api我们很少使用.这篇文章仍然会结合使用及原理进行深度分析 内容导航 Thread.join的作用 Thread.join的实现原理 ...

  4. Java Thread.join()方法

    一.使用方式. join是Thread类的一个方法,启动线程后直接调用,例如: Thread t = new AThread(); t.start(); t.join(); 二.为什么要用join() ...

  5. 浅析 Java Thread.join()

    转自:http://blog.csdn.net/bzwm/article/details/3881392 一.在研究join的用法之前,先明确两件事情. 1.join方法定义在Thread类中,则调用 ...

  6. 【转】Java Thread.join()详解

    http://www.open-open.com/lib/view/open1371741636171.html 一.使用方式. join是Thread类的一个方法,启动线程后直接调用,例如: ? 1 ...

  7. Java Thread.join()详解(转)

    (1)join方法是可以中断的(2)在线程joiner在另一个线程t上调用t.join(),线程joiner将被挂起,直到线程t结束(即t.isAlive()返回为false)才恢复 package ...

  8. JAVA THREAD.JOIN方法详解

    一.使用方式. join是Thread类的一个方法,启动线程后直接调用,例如: Thread t = new AThread(); t.start(); t.join(); 二.为什么要用join() ...

  9. Java Thread.join()详解--父线程等待子线程结束后再结束

    目录(?)[+] 阅读目录 一.使用方式. 二.为什么要用join()方法 三.join方法的作用 join 四.用实例来理解 打印结果: 打印结果: 五.从源码看join()方法   join是Th ...

随机推荐

  1. Stanford CoreNLP--Split Sentence

    分句功能参考 Stanford Tokenizer. 在edu.stanford.nlp.pipeline包中实现了一系列分词分句功能,其中SentenceAnnotator类实现了对文件分句功能. ...

  2. ubuntu 10.04 安装qt 5.0.2

    转自ubuntu 10.04 安装qt 5.0.2 从qt project网站下载下来最新的qt5.0.2套件,发现是个.run文件,添加x属性,然后直接sudo ./****.run, 提示  /l ...

  3. 【bzoj 3299】 [USACO2011 Open]Corn Maze玉米迷宫(最短路)

    就一个最短路,并且边长都是1,所以每个点只搜一次. /************************************************************** Problem: 3 ...

  4. How to: Use a Custom User Name and Password Validator

    在wcf中使用自定义的用户名和密码验证方式 https://msdn.microsoft.com/en-us/library/aa702565.aspx http://www.codeproject. ...

  5. WordPress RokNewsPager插件‘thumb.php’多个安全漏洞

    漏洞名称: WordPress RokNewsPager插件‘thumb.php’多个安全漏洞 CNNVD编号: CNNVD-201309-369 发布时间: 2013-09-24 更新时间: 201 ...

  6. 关于启动Visual Studio 2010 旗舰版的几个错误的解决方法。

    关于启动Visual Studio 2010 旗舰版的几个错误的解决方法.亲测. 重做系统之后,今天是第一次打开Visual Studio 2010 旗舰版码代码,结果遇到几个弹出的对话框,现在与大家 ...

  7. ASOP源码下载

    vmware11下对虚拟机ubuntu14.10系统所在分区sda1进行磁盘扩容完后,重启在引导界面出现“a start job is running for dev-disk-by…”错误,产生此错 ...

  8. tcp/ip体系-转载

    如果还想在测试这条路上继续走下去的话,那么下面这些东西就是我们必须去掌握的,至少你还不想止步于简单的黑盒测试--其实,一直想去接触Linux下的应用测试,这样能学到东西会很多,而且会非常的受用.之前听 ...

  9. HDOJ/HDU 1022 Train Problem I(模拟栈)

    Problem Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot o ...

  10. jQuery dataTables 网格

    对于服务器来说,可以通过请求参数来获得当前的操作信息. 类型 名称 说明 int iDisplayStart 显示的起始索引 int iDisplayLength 显示的行数 int iColumns ...