我对执行多线程程序时的当前线程感到困惑。
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之前和之后启动多个线程:
提前致谢。
答案 0 :(得分:5)
currentThread:返回对当前正在执行的线程的引用 对象
所以,当你在main方法中时,那是你的主线程,当你处于AThread的run方法时,那就是你的a-thread。
答案 1 :(得分:1)
如果我正确理解你的问题,你就不清楚"主线程"和"当前线程"。首先,主线程是定义应用程序上下文的线程;当主线程结束时,应用程序也应该(应该)结束。
"当前线程"可以是相对的;你可以同时运行任意数量的线程 - 这是线程的重点 - 但是"当前线程"可能意味着"我们现在正在讨论的执行线程",或者它可能意味着您通过调用 static 方法获得引用的Thread对象,如前所述提到 - 这意味着"这个线程,执行的路径我是"的步骤。如果在主类或运行主类的线程中调用currentThread()方法,则会获得对主线程的引用 - 控制应用程序生命周期的线程(这大大过于简单化了) )。如果从作为扩展线程的对象的run方法的一部分或由其调用的任何代码调用currentThread(),则会获得对该对象的该实例的引用。这基本上是说明Juned上述内容的漫长道路。
另外,我谦卑地提出你可能会混合语言; CurrentThread 是C#中的一个类,但不是Java中的类。