【问题标题】:Regarding assigning task to daemon thread关于将任务分配给守护线程
【发布时间】:2012-07-26 06:45:37
【问题描述】:

我有一个要求,我想创建一个由 5 个线程组成的池,现在我想将这 5 个线程中的 1 个线程作为 daemon 线程,当那个特定的 1 个线程成为守护线程时,我想要为与任何服务相关的守护线程分配一些任务,这样当 java 程序退出时,我可以在窗口任务管理器中检查特定守护线程仍在执行该任务。请告知如何实现该任务..!因为我坚持这个..!

下面是我的代码...

public class StoppingThread extends Thread //extend thread class 
{
    // public  synchronized void run()
     //synchronized (this)

    private volatile boolean Completed = false;


    public void setCompleted() {
        Completed = true;
    }


    public void run()
    {
      for(int i=0;i<20 && !Completed;++i) {
          System.out.println(Thread.currentThread().getName());
        try {
          Thread.sleep(500);

          System.out.print(i +"\n"+ "..");
        } catch(Exception e) {
          e.printStackTrace();
        }
      } 
    } 

 public static void main(String... a) 
 {
     StoppingThread x = new StoppingThread();
     StoppingThread y = new StoppingThread();
     x.start();
     x.setName("first");
     x.setCompleted(); // Will complete as soon as the latest iteration finishes means bolean variable value is set to true 
     y.start();
     y.setName("second");

     }  

 }

现在我想让 Y 线程作为守护线程,然后想给它分配一些任务

【问题讨论】:

    标签: java threadpool daemon


    【解决方案1】:

    使用ShutDownHook。您注册到钩子中的线程将在应用程序结束时被调用。您可以在此线程运行方法中添加所有清理代码(DB、Stream、Context 等)或任何自定义功能。

    Runtime.getRuntime().addShutdownHook(new Thread() {
        public void run() { // clean up code like closing streams,DB etc }
    });
    

    【讨论】:

    • @Akhil..能否请您在我上面的代码中进行修改..!根据您的建议,这将有助于理解这个概念
    • 让我引用你的话“当 java 程序退出时,我可以在窗口任务管理器中检查特定的守护线程仍在执行该任务”。你能详细说明吗?如果没有其他线程在运行,则守护线程将退出。那么您到底希望该线程做什么?
    猜你喜欢
    • 2012-07-24
    • 2012-09-05
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多