java - 关于守护线程

标签 java multithreading

我正在做一项研究,我想让一个用户线程作为守护线程,Thread.setDaemon(true) 使一个线程守护进程,但正如我们所知,守护线程适合做后台工作,所以我想将我的这个线程链接到任何后台守护线程,以便我的守护线程可以为该线程提供一些服务,并且当该守护线程结束时它应该结束,尽管我已经创建了守护线程,但请告知我如何通过我的服务提供服务守护线程到任何现有的守护线程,然后它应该最终结束,请告知。

     Thread daemonThread = new Thread(new Runnable(){
            @Override
           public void run(){
               try{
               while(true){
                   System.out.println("Daemon thread is running");
               }

               }catch(Exception e){

               }finally{
                   System.out.println("Daemon Thread exiting"); //never called
               }
           }
       }, "Daemon-Thread");

       daemonThread.setDaemon(true); //making this thread daemon
       daemonThread.start();


}

最佳答案

我不太明白你的意思,但我会改变

while(true){

while(!Thread.currentThread.isInterrupted()){

这将使您的线程在中断时停止。

我还会考虑使用 ExecutorService,因为这样可以更轻松地将工作传递给另一个线程并在完成后将其关闭。

ExecutorService service = Executors.newSingleThreadExecutor(new ThreadFactory() {
    @Override
    public Thread newThread(Runnable r) {
        Thread t = new Thread(r, "worker");
        t.setDaemon(true);
        return t;
    }
});

service.submit(new Runnable() { /* task for this thread to perform */ });

service.shutdown(); // to stop it.

关于java - 关于守护线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10468629/

相关文章:

c++ - 我可以将方法转换为 LPTHREAD_START_ROUTINE 吗?

c# - 取消订阅套接字流后取消特定的子线程或任务

java - 如何用java中的数据库中的日期绘制甘特图

java - 带有 List<String> 的原始类型给出编译错误

javascript - 计算在java webdriver中加载的图像的md5

android - InstrumentationTestCase2 中 AlertDialog 上的 peformClick() 不起作用

c++ - 在线程中使用原子变量

java - 使用适用于 Java 的 Visual Studio 2013

java - 在 Kotlin 函数类型中表达 "super"泛型?

java - 通过线程池运行可运行,我应该使用 volatile 吗?