当前位置:  技术问答>java相关

Tread中的join是干什么的

    来源: 互联网  发布时间:2015-06-12

    本文导语:  jdk doc讲的很少 能给些例子马? | Re: Thread.join() Luis de la Rosa, May 22, 2002 If you have code that looks like: Thread a = new YourThread(); a.start(); a.join(); If thread a completes its run method before th...

jdk doc讲的很少

能给些例子马?

|
Re: Thread.join()
Luis de la Rosa, May 22, 2002

If you have code that looks like:

Thread a = new YourThread();
a.start();
a.join();

If thread a completes its run method before the current thread gets a chance to execute the join method on a, that is ok. The thread is considered to be "dead" and thus when you call join on it, the join returns right away.

The way this works is explained if you look at the code for Thread.join(). It tests to see if the thread is still alive with the isAlive() call. Unfortunately, you cannot see how the isAlive() method works since it is a native method and you cannot see where the thread actually changes its state from alive to dead. However, if you debug your a thread and ask it if it is alive, then you can see the transition. Since thread scheduling can vary, this can happen at different times during different runs.

Here is some code to illustrate:

Thread a = new YourThread();
System.out.println( "is the thread alive before starting? " + a.isAlive() );
a.start();
System.out.println( "is the thread alive after starting? " + a.isAlive() );
a.join();
System.out.println( "is the thread alive after joining? " + a.isAlive() );

The thread should be dead before starting and after joining. Depending on how fast the thread's run executes, it may tell you it is still alive after starting.

I think the Thread lifecycle (in this context) is as follows: 

thread created: it is dead. 
thread started: it is now alive. 
thread executes its run method: it is alive during this method. 
after thread finishes its run method: it is dead. 

You should not call the join() method before the start() method, because the join() will return right away, the start() will trigger, and your current thread will happily continue executing. However, this is probably not what you wanted if you wanted to wait for the thread to finish before your current thread continues.


 呵呵,浩哥可以去www.jguru.com瞧一眼,很不错的java解惑网站哦。

|
一个线程等待另一个线程执行完成

|
Thread thread = new Thread();
thread.join();
//等待thread返回;
//or:
//thread.join( second * 1000 );
//等待一定时间;

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3