package MyTest;

 class TestDemo implements Runnable {

     public void run() {
int i = 0;
for (int j = 0; j < 10; j++) {
System.out.println(Thread.currentThread().getName() + " ---> "
+ i++);
}
}
} public class Demo1 {
public static void main(String[] args) {
TestDemo testDemo = new TestDemo();
Thread t1 = new Thread(testDemo);
t1.start();
int i = 0;
for(int x = 0;x<10;x++){
if(i == 5){
try{
t1.join(1000);
}
catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}
}
System.out.println("main thread "+i++); }
}
}
 main thread 0
main thread 1
main thread 2
Thread-0 ---> 0
Thread-0 ---> 1
Thread-0 ---> 2
Thread-0 ---> 3
main thread 3
main thread 4
Thread-0 ---> 4
Thread-0 ---> 5
Thread-0 ---> 6
Thread-0 ---> 7
Thread-0 ---> 8
Thread-0 ---> 9
main thread 5
main thread 6
main thread 7
main thread 8
main thread 9

[-]程序中调用join方法()

    在程序中共有两个线程,一个是main()另一个是t1,在程序运行至ti.join()之前,两个线程的运行时同时的,但是当调用了该方法之后,随后就一直运行线程t1直到该线程运行完毕。如上述结果中在第十行调用了join()方法。

  该无参数的方法,直到调用该方法的线程全部运行完毕之后才会运行其他的线程。

  join(long millis)和join(long millis,int nanos),[第一个只有一个毫秒,第二个精确到纳秒] 就是调用该方法的线程执行时间,也就是其他线程等待的时间。

  

  从上面的代码中可以看出,join将线程t1并入main中,在main中执行,直到t1执行完毕,再继续运行main线程。

【注】:

public class TestJoin {

……

Thread t1;

t1.start();

try{

t1.join();}catch(){}

……

}

class MyThread extends Thread{

public void run(){

………………

}

在没有执行t1.start()之前,只有main主线程在执行,运行至t1.start()之后,两个线程并发,在try块中t1.join()在此将两个进程合为一个,但是在合并之前,t1.join()要将t1的run()全部运行完毕之后或者完成join()内规定的时间才可以继续执行在main()终止处继续执行下面的代码。【具体如图】

具体代码以及输出结果:

 package Test;

 public class TestJoin {
public static void main(String[] args) {
MyThread2 t1 = new MyThread2("Stone");
// main 主线程运行 t1.start();//两个线程都在运行
try{
t1.join();
// main()线程被终止,继续运行t1,直到t1运行完毕。
}catch(InterruptedException e){} for(int i = 0;i<10;i++)
System.out.println("It is a main thread."+i);
}
} class MyThread2 extends Thread {
MyThread2(String str) {
super(str);
} public void run() {
for(int i = 0;i<10;i++){
System.out.println("I am "+getName()+' '+ i);
try{
sleep(1000); }catch(InterruptedException e){
return;
} }
}
} I am Stone 0
I am Stone 1
I am Stone 2
I am Stone 3
I am Stone 4
I am Stone 5
I am Stone 6
I am Stone 7
I am Stone 8
I am Stone 9
It is a main thread.0
It is a main thread.1
It is a main thread.2
It is a main thread.3
It is a main thread.4
It is a main thread.5
It is a main thread.6
It is a main thread.7
It is a main thread.8
It is a main thread.9

java--join方法的更多相关文章

  1. java join 方法的使用

    在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束.这时,如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据 ...

  2. JAVA join()方法

    转自:http://www.open-open.com/lib/view/open1371741636171.html 一.为什么要用join()方法 在很多情况下,主线程生成并起动了子线程,如果子线 ...

  3. 【多线程】java多线程 测试例子 详解wait() sleep() notify() start() join()方法 等

    java实现多线程,有两种方法: 1>实现多线程,继承Thread,资源不能共享 2>实现多线程  实现Runnable接口,可以实现资源共享 *wait()方法 在哪个线程中调用 则当前 ...

  4. Java线程中yield与join方法的区别

    长期以来,多线程问题颇为受到面试官的青睐.虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用.之前,我讨论了一个w ...

  5. 简谈Java的join()方法

    join()是Thread类的一个方法.根据jdk文档的定义: public final void join()throws InterruptedException: Waits for this ...

  6. Java多线程中的join()方法

    一.join()方法介绍 join() 定义在Thread.java中.join()方法把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的join( ...

  7. java多线程 join方法以及优先级方法

    /*join:当A线程执行到了B线程的.join()方法时,A就会等待.等B线程都执行完,A才会执行. join可以用来临时加入线程执行. 1.线程使用join方法,主线程就停下,等它执行完,那么如果 ...

  8. Java中join()方法的理解

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

  9. Java并发编程--多线程中的join方法详解

    Java Thread中, join()方法主要是让调用该方法的thread在完成run方法里面的部分后, 再执行join()方法后面的代码 例如:定义一个People类,run方法是输出姓名年龄. ...

  10. 模拟做饭系统(java+线程中的join方法)

    (一)项目框架分析 妈妈要去做饭,发现没有酱油,让儿子去买酱油,然后回来做饭. 根据面向对象的思想,有两个对象,妈妈和儿子 主要有两个方法: (一)没有线程控制(即儿子没有买酱油回来妈妈就做好饭了)+ ...

随机推荐

  1. Android开发之旅:android架构

    本篇将站在顶级的高度——架构,来看android.我开篇就说了,这个系列适合0基础的人且我也是从0开始按照这个步骤来 学的,谈架构是不是有点螳臂挡车,自不量力呢?我觉得其实不然,如果一开始就对整个an ...

  2. CSS3学习笔记之linear-gradient

    我觉得CSS3很不错,自己也稍微看过,并且尝试过一些属性.对我自己而言,我没有勇气说我学过CSS3,我觉得任何自己看来很小的事情,也只是站在自己的角度来评判.就算的是"简单的"HT ...

  3. JQuery中Checkbox的一些功能

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. Axure使用

    (一)  Axure rp的界面 1-主菜单工具栏 大部分类似office软件,不做详细解释,鼠标移到按钮上都有对应的提示. 2-主操作界面 绘制产品原型的操作区域,所有的用到的元件都拖到该区域. 3 ...

  5. JQuery的stop()属性

    $(function(){ $('#input1').hover( function(){ $('.div1').stop() .animate({left:) .animate({top:); } ...

  6. python2.5_1.5_通过指定的端口和协议找到服务名

    代码如下: # -*- coding: utf-8 -*- import socket def find_service_name(): protocolname = 'tcp' for port i ...

  7. poj 1204

    http://poj.org/problem?id=1204 大意:给出一个棋盘puzzle,,和w个模式串,,在棋盘中寻找模式串..棋盘中任意一格有8个方向可以走.. 解题思路: AC自动机 + 枚 ...

  8. mysql在linux上的一点操作

    1,查看打开端口. show variables like 'port'; 2, 指定ip,用户名,密码 1 grant all privileges on   *.* to root@"% ...

  9. cpu有哪些架构

    原文:http://blog.csdn.net/wyzxg/article/details/5027738 author:skatetime:2009/12/17 这几天在下载RPM包的时候,总会看见 ...

  10. Windows Phone 8初学者开发—第13部分:设置LongListSelector中磁贴的样式

    原文 Windows Phone 8初学者开发—第13部分:设置LongListSelector中磁贴的样式 第13部分:设置LongListSelector中磁贴的样式 原文地址: http://c ...