Java当前线程

时间:2013-05-22 16:59:43

标签: java multithreading

我对执行多线程程序时的当前线程感到困惑。

public class CurrentThread {

public static void main(String[] args) {
            // FROM HERE: will always be "main-thread" the current thread ?
    CurrentThread currentThread = new CurrentThread();
    currentThread.testCurrentThread();
            // TO HERE         
}

private void testCurrentThread() {
    // some other threads starts...
    AThread athread = new AThread();
    athread.start();
    // some other threads starts...
}

class AThread extends Thread {

    public AThread() {
        setName("thread-a");
    }

    public void run() {
        // FROM HERE: will always be thread-a the current thread during finish the run method ?
                    // some process
                    // TO HERE...
    }
}

}

假设在启动线程AThread之前和之后启动多个线程:

  1. 当你进入main方法时,每当你调用Thread.currentThread()时都会是“主线程”?
  2. 当你在AThread的run方法里面时,每当你调用Thread.currentThread()时都会是“a-thread”?
  3. 提前致谢。

2 个答案:

答案 0 :(得分:5)

  

currentThread:返回对当前正在执行的线程的引用   对象

所以,当你在main方法中时,那是你的主线程,当你处于AThread的run方法时,那就是你的a-thread。

答案 1 :(得分:1)

如果我正确理解你的问题,你就不清楚"主线程"和"当前线程"。首先,主线程是定义应用程序上下文的线程;当主线程结束时,应用程序也应该(应该)结束。

"当前线程"可以是相对的;你可以同时运行任意数量的线程 - 这是线程的重点 - 但是"当前线程"可能意味着"我们现在正在讨论的执行线程",或者它可能意味着您通过调用 static 方法获得引用的Thread对象,如前所述提到 - 这意味着"这个线程,执行的路径我是"的步骤。如果在主类或运行主类的线程中调用currentThread()方法,则会获得对主线程的引用 - 控制应用程序生命周期的线程(这大大过于简单化了) )。如果从作为扩展线程的对象的run方法的一部分或由其调用的任何代码调用currentThread(),则会获得对该对象的该实例的引用。这基本上是说明Juned上述内容的漫长道路。

另外,我谦卑地提出你可能会混合语言; CurrentThread 是C#中的一个类,但不是Java中的类。