处理一个不会在java中停止runnable()的方法

时间:2018-04-13 15:00:23

标签: java multithreading desktop-application

我希望有一个方法来检查数据库中是否每秒都有更新,如果方法在数据库中发现了更改,它将调用另一个方法来执行所需的操作。

我面临的问题是我想要一种方法,即使它调用另一种方法执行一个操作块,也会每秒重复一次。

我该怎么做?

我已经使用过此代码

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    Runnable r = new Runnable() {

        @Override
        public void run() {
            try {
                CheckNewRequest();
                System.out.println("rode road rowd rowed");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                 JOptionPane.showMessageDialog(null, e.toString(), "Error CheckNewRequest()", JOptionPane.INFORMATION_MESSAGE);
            }
        }
    };

    scheduler.scheduleAtFixedRate(r, 0, 1, TimeUnit.SECONDS);

其中TimeUnit = 1000,但问题是它不会在指定的时间内重复出现。

1 个答案:

答案 0 :(得分:0)

您的核心池大小为1(var ni = new CultureInfo(CultureInfo.CurrentCulture.Name).NumberFormat; ni.NumberDecimalDigits = 0; //Keep the ".00" from appearing ni.NumberGroupSeparator = " "; //Set the group separator to a space ni.NumberGroupSizes = new int[] { 3 }; //Groups of 3 digits var dig = 123456789; Console.WriteLine(dig.ToString("N", ni)); ),因此您一次只能执行一个线程,等待执行将进入队列(如果队列已满,执行程序将只创建新线程并且只有当线程再次空闲时才执行它们。

我建议更改核心池大小以匹配您需要的并行线程数,并且您可以从请求采用的时间推断出,如果需要5秒,那么当一个线程请求其他第四个线程时在他之前开始运行(因为你的时间是一秒),这意味着你需要5个线程。