Welcome 微信登录

首页 / 软件开发 / JAVA / 深入浅出Java多线程(1)-方法join

深入浅出Java多线程(1)-方法join2010-12-09advincenting对于Java开发人员,多线程应该是必须熟练应用的知识点,特别是开发基于 Java语言的产品。本文将深入浅出的表述Java多线程的知识点,在后续的系列里 将侧重于Java5由Doug Lea教授提供的Concurrent并行包的设计思想以及具体实 现与应用。

如何才能深入浅出呢,我的理解是带着问题,而不是泛泛的看。所以该系列 基本以解决问题为主,当然我也非常希望读者能够提出更好的解决问题的方案以 及提出更多的问题。由于水平有限,如果有什么错误之处,请大家提出,共同讨 论,总之,我希望通过该系列我们能够深入理解Java多线程来解决我们实际开发 的问题。

作为开发人员,我想没有必要讨论多线程的基础知识,比如什么是线程?如何创建等 ,这些知识点是可以通过书本和Google获得的。本系列主要是如何理 深入解多线程来帮助我们平时的,比如线程池如何实现?如何应用锁等。

(1)方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答。

自从接触Java多线程,一直对Join理解不了。JDK是这样说的:

join
public final void join(long millis)throws InterruptedException
Waits at most millis milliseconds for this thread to die. A timeout of 0 means to wait forever.

大家能理解吗? 字面意思是等待一段时间直到这个线程死亡,我的疑问是那 个线程,是它本身的线程还是调用它的线程的,上代码:

package concurrentstudy;
/**
*
* @author vma
*/
public class JoinTest {
public static void main(String[] args) {
Thread t = new Thread(new RunnableImpl());
t.start();
try {
t.join(1000);
System.out.println("joinFinish");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class RunnableImpl implements Runnable {
@Override
public void run() {
try {
System.out.println("Begin sleep");
Thread.sleep(1000);
System.out.println("End sleep");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

结果是:

Begin sleep
End sleep
joinFinish