从 运行() 方法调用另一个 class 的方法

Calling method of Another class from run() method

我创建了一个调用 运行 方法的调度程序。

@WebListener
public class BaclkgroundJobManager implements ServletContextListener {

    private ScheduledExecutorService scheduler;
    public void contextInitialized(ServletContextEvent sce)  { 

        scheduler=Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(new SomeMinuteJob(), 0, 5, TimeUnit.MINUTES);      
     }
}

这调用到

public class SomeMinuteJob implements Runnable {

    @Override
    public void run() {
        
        System.out.print("Inside run method");
            ReadData obj= new ReadData();
            obj.readData();
            System.out.println("After reading data");
            }       

}

我在下面创建了 ReadData class。

public class ReadData
{
   public void readData()
   {
     System.out.println("I am inside readdata");
   }
}

所以我在 运行() 方法中创建了 ReadData 的对象并调用了它的方法。但是 ReadData class 并没有得到控制。它不打印 readData() 方法中的内容。即使我创建了构造函数并放置了一些内容,但即使那不是打印。我该如何解决? 控件进入 运行 并打印 Inside run method

ScheduledExecutorService 的一个常见问题是,如果计划的命令抛出异常,异常会被静静地吞掉。题目中的代码好像没有抛出异常,但是在更复杂的代码中很难避免(例如unexpected NullPointerExceptions)

快速修复是将所有 Runnable.run 方法放在 try-catch 块中:

public class SomeMinuteJob implements Runnable {
    @Override
    public void run() {
        try {
            System.out.print("Inside run method");
            ReadData obj = new ReadData();
            obj.readData();
            System.out.println("After reading data");
        } catch (Exception e) {
            // Log exception
            e.printStackTrace();
        }
    }
}