【问题标题】:How to determine if a thread is main thread in Java? [duplicate]如何判断一个线程是否是Java中的主线程? [复制]
【发布时间】:2019-08-28 18:04:51
【问题描述】:

在 Java 中,程序员可以更改主线程的名称。那么如何判断一个线程是不是主线程呢?

package bj.thread;

public class ThreadApp2 {

    public static void main(String[] args) {
        System.out.printf("The main thread name is %s\n", Thread.currentThread().getName());
        Thread.currentThread().setName("not-main");
        System.out.printf("The main thread name is %s\n", Thread.currentThread().getName());
    }
}

输出:

The main thread name is main
The main thread name is not-main

【问题讨论】:

  • 一个线程是否是主线程对你来说很重要?
  • Java 中的主线程没有什么特别之处,只是它是调用应用程序的main 方法的线程。应用程序可以在主线程停止运行很长时间后继续运行。

标签: java multithreading


【解决方案1】:
public static boolean isMainThread(){
    return Thread.currentThread().getId() == 1;
}

免责声明:文档中没有说明 id == 1 => 它是主线程

【讨论】:

  • 警告:如果 javadocs 没有说明这一点,那么你不应该依赖它。这可能不适用于所有 Java 实现,并且在未来的实现中可能会发生变化。
【解决方案2】:

更常见的决定是在您的程序以main() 方法启动后立即保存线程 ID,并在需要时将其与其他线程 ID 进行比较

P.S 如果你够怪,你可以使用特殊的 Java 反射 API 并将你的检查代码插入到 main() 函数开始任何代码。当您尝试使用第 3 方代码时,它会很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-14
    • 2011-06-19
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    相关资源
    最近更新 更多