Java 线程中的 Join 浅析
2015-03-11 00:00
267 查看
Join是Java线程中的一个方法。网上对其解释有很多,其实作用很简单,就是如果某个线程调用了join方法,则该行代码(thread.join() ) 之后的代码,需要在该线程执行完毕之后才能执行,很简单,首先给出一个没有使用join的例子。代码如下:
执行结果如下:
从该结果不难看出,在两个线程启动以后,主程序很快结束工作。而两个线程同时执行,相互的打印出结果。最后两个线程结束。
我们进行如下更改:
执行结果如下:
从结果中不难看出,在线程1启动之后,调用了join方法,主线程等待线程1执行完毕后,启动了线程2,然后主线程自己退出,这个时候线程2依然在工作,线程2工作结束之后,线程2退出。
继续进行更改如下:
再次执行程序,得到结果如下:
从结果中可以看出,线程1执行完毕之后,线程2才开始执行,线程2结束之后,主线程才退出。
从这个简单的例子可以看出,Java线程的join机制可以帮助控制线程的顺序执行,比如线程B的依赖于线程A的结果,则可以利用该机制,等线程A得到结果之后,线程B才开始执行。
public class JoinTester implements Runnable{ @Override public void run() { for( int i = 0;i < 5;i ++){ System.out.println(Thread.currentThread().getName()); try { Thread.currentThread().sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String args[]){ JoinTester join = new JoinTester(); Thread t1 = new Thread(join, "Thread 1"); Thread t2 = new Thread(join, "Thread 2"); t1.start(); t2.start(); System.out.println("主线程结束"); } }
执行结果如下:
Thread 1 主线程结束 Thread 2 Thread 2 Thread 1 Thread 2 Thread 1 Thread 2 Thread 1 Thread 2 Thread 1
从该结果不难看出,在两个线程启动以后,主程序很快结束工作。而两个线程同时执行,相互的打印出结果。最后两个线程结束。
我们进行如下更改:
t1.start(); try { t1.join(); } catch (InterruptedException e) { e.printStackTrace(); } t2.start(); System.out.println("主线程结束");
执行结果如下:
Thread 1 Thread 1 Thread 1 Thread 1 Thread 1 主线程结束 Thread 2 Thread 2 Thread 2 Thread 2 Thread 2
从结果中不难看出,在线程1启动之后,调用了join方法,主线程等待线程1执行完毕后,启动了线程2,然后主线程自己退出,这个时候线程2依然在工作,线程2工作结束之后,线程2退出。
继续进行更改如下:
t1.start(); try { t1.join(); } catch (InterruptedException e) { e.printStackTrace(); } t2.start(); try { t2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("主线程结束");
再次执行程序,得到结果如下:
Thread 1 Thread 1 Thread 1 Thread 1 Thread 1 Thread 2 Thread 2 Thread 2 Thread 2 Thread 2 主线程结束
从结果中可以看出,线程1执行完毕之后,线程2才开始执行,线程2结束之后,主线程才退出。
从这个简单的例子可以看出,Java线程的join机制可以帮助控制线程的顺序执行,比如线程B的依赖于线程A的结果,则可以利用该机制,等线程A得到结果之后,线程B才开始执行。
相关文章推荐
- Java Thread.join()详解--父线程等待子线程结束后再结束
- 有关Java线程机制的浅析
- 浅析 Java Thread.join()
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- java 线程合并(join)
- 【java】创建线程的三种方式浅析
- java线程之join方法
- 浅析 Java Thread.join()
- 从头认识java-18.2 主要的线程机制(7)join
- 浅析Java线程的三种实现
- java线程挂起(join)
- 浅析 Java Thread.join()
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- Java多线程____线程状态Join()方法
- java 笔记(5) —— 线程,yield,join
- 浅析Java中如何实现线程之间通信
- Java线程的join()方法
- java线程浅析[多线程同步]
- java学习总结——线程的sleep、yield、join方法
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别