当前位置: 首页 > 面试题库 >

有什么方法可以将主线程与其产生的任何线程区分开来吗?

傅自明
2023-03-14
问题内容

我知道getName()主线程上的函数将返回String main,但是可以使用进行更改setName()

有什么方法可以始终确定应用程序的主线程吗?


问题答案:

看来,主线程都有一个 ID
1通过所示Thread.getId()

class test{
    public static boolean isMainThread(){
        return Thread.currentThread().getId() == 1;
    }

    public static void main(String[]args){
        System.out.println(isMainThread());
        new Thread( new Runnable(){
            public void run(){
                System.out.println(isMainThread());
            }
        }).start();
    }
}

我不确定它是规范的一部分还是特定于实现的功能。

一种更可移植的方式是这样的:

class test{

    static long mainThreadId = Thread.currentThread().getId();

    public static boolean isMainThread(){
        return Thread.currentThread().getId() == mainThreadId;
    }

    public static void main(String[]args){
        System.out.println(isMainThread());
        new Thread( new Runnable(){
            public void run(){
                System.out.println(isMainThread());
            }
        }).start();
    }
}

注意事项mainThreadId必须位于主线程加载的类中(例如,包含main方法的类)。例如,这不起作用:

class AnotherClass{
    static long mainThreadId = Thread.currentThread().getId();

    public static boolean isMainThread(){
        return Thread.currentThread().getId() == mainThreadId;
    }
}
class test{
    public static void main(String[]args){
        //System.out.println(isMainThread());
        new Thread( new Runnable(){
            public void run(){
                System.out.println(AnotherClass.isMainThread());
            }
        }).start();
    }
}


 类似资料:
  • 下面是代码,我面临的问题是recordRead变量告诉线程应该从哪里开始读取记录的起点。但是我如何为每个线程设置不同的值?例如,对于thread1,它应该是0,recordsToRead应该是300,对于thread2,recordsToRead应该是300+300=600,对于最后一个线程,它应该是600以及更高的结束。pagesize=50pagesize、recordRead和recordT

  • 我想知道Java中是否有某种方法可以立即停止线程。我不想检查它的中断状态,我需要立即停止它。这是因为在Thread的run方法中有许多计算,为了使用interrupted实现我想要的结果,我必须到处注入状态检查。那么有什么方法可以立即中断线程吗?也许stop()方法?我知道有人说它不应该被使用,因为死锁,但如果它可以解决我的问题(即使它会引起另一个问题;))我可以用它。所以?附注。我知道有其他类似

  • 来自文档:http://docs.python.org/2/library/thread 让我们在这里只讨论非守护进程线程。因为第一个引号没有特别提到非守护进程线程,所以我假设,如果主线程退出,即使是非守护进程线程也应该被杀死。然而,第二句引文却表明了另一种情况。事实上,当主线程退出时,非守护进程线程确实不会被杀死。那么,这里的第一个引用有什么意义呢?

  • 问题内容: 目的是能够从 主类中* 调用 单独线程的 执行。 * 一些上下文:我有一个必须运行 进程的程序 。仅当主程序执行完毕并从内存中卸载时,该进程 (一个cmd程序)才 应运行。 我应该在 主类中 包括哪些代码? 问题答案: 如果您的意思是: 如何启动一个Java线程,当我的JVM(Java程序)运行时,该线程不会结束? 。 因为在Java中,如果JVM退出,则所有线程均已完成。这是一个例子

  • 问题内容: 我想看看使用多线程生产者而不是单线程生产者会有多少时间差异。我在本地计算机上设置了ActiveMQ,编写了生产者类,该类将初始化并在其构造函数中启动JMS连接。我将消息限制设置为3M,将所有消息推送到ActiveMQ大约花费了50秒。我只发送了一个字符串“ hello world” 3M次。 然后,我使用了相同的生产者对象(一个连接但有多个会话),并使用线程大小为8的ExecutorS

  • 问题内容: 是否可以在不设置/检查任何标志/信号灯/等的情况下终止正在运行的线程? 问题答案: 在Python和任何语言中,突然终止线程通常都是一种糟糕的模式。请考虑以下情况: 线程持有必须正确关闭的关键资源 该线程创建了其他几个必须同时终止的线程。 如果你负担得起的话(如果你要管理自己的线程),处理此问题的一种好方法是有一个标志,每个线程定期检查一次,以查看是否该退出。 例如: 在此代码中,你应