线程的状态

Posted 懵懂的菜鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程的状态相关的知识,希望对你有一定的参考价值。

线程的5种状态:

http://blog.csdn.net/pange1991/article/details/53860651

 

http://www.cnblogs.com/xll1025/p/6415283.html

 

join()方法详解:

http://blog.csdn.net/studyvcmfc/article/details/7426385

解释一下,是主线程等待子线程的终止。也就是在子线程调用了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
明白了吧,当main线程调用t.join时,main线程等待t线程,等待时间是1000,如果t线程Sleep 2000呢 
 public void run() {
        try {
            System.out.println("Begin sleep");
            // Thread.sleep(1000);
            Thread.sleep(2000);
           System.out.println("End sleep");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
结果是:
Begin sleep
joinFinish
End sleep

 

以上是关于线程的状态的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程-线程的状态和线程常用方法

多线程-线程状态

Java多线程:线程状态

多线程状态及线程池管理

多线程(三):线程的状态

不知如何判断线程的状态