繁体   English   中英

Java当前线程

[英]Java current thread

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

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”?

提前致谢。

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

因此,当您使用主方法时,即您的主线程;当您使用AThread的运行方法时,即您的a线程。

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

“当前线程”可以是相对的; 您可以同时运行任意数量的线程-这就是线程的要点-但“当前线程”可以表示“我们正在谈论的执行线程”,也可以表示您获得引用的Thread对象通过调用静态方法(如前所述)表示-表示“此线程是我迈出的一步”。 如果您在主类或运行主类的线程中调用currentThread()方法,则将获得对主线程的引用-控制应用程序生命周期的线程(这大大简化了)。 如果由于作为扩展线程的对象的一部分或被其运行方法调用而从正在运行的任何代码中调用currentThread(),则会获得对该对象实例的引用。 这基本上是说Juned所说的话的很长的路要走。

另外,我谦卑地提出您可能正在使用多种语言。 CurrentThread是C#中的类,但不是Java中的类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM