当前位置: 首页 > 知识库问答 >
问题:

只循环一次

谷梁凌
2023-03-14

我试图实现每秒循环一次的ScheduledExecutorService线程,但现在它只循环一次。

我的问题是如何设置它,使它周期性地循环,而不是一次迭代?

另外,如何将连接池传递给线程,以便每次迭代都可以查询数据库?任何帮助都非常感谢。

public static void main(String[] args) throws InterruptedException {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    AdminManager frame = new AdminManager();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        });

        BoneCP connectionPool = null;
        Connection connection = null;

        try {
            // load the database driver (make sure this is in your classpath!)
            Class.forName("com.mysql.jdbc.Driver");
        } catch (Exception e) {
            e.printStackTrace();
            return;
        }

        try {
            // setup the connection pool
            BoneCPConfig config = new BoneCPConfig();
            config.setJdbcUrl("jdbc:mysql://192.0.0.1:3306/database"); // jdbc url specific to your database, eg jdbc:mysql://127.0.0.1/yourdb
            config.setUsername("root"); 
            config.setPassword("");
            connectionPool = new BoneCP(config); // setup the connection pool

            connection = connectionPool.getConnection(); // fetch a connection

            if (connection != null){
                System.out.println("Connection successful!");
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

        ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
        exec.schedule(new Runnable(){
            @Override
            public void run(){
                System.out.println("Working ... ");

            }
        }, 1, TimeUnit.SECONDS);

        //connectionPool.shutdown(); // shutdown connection pool.
}

共有1个答案

夏侯兴学
2023-03-14

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ScheduledExecutorService.html

有一个scheduleAtFixedRate方法。要将某个内容传递给匿名类,需要将其声明为final。它需要在相同的范围内。

此外,您现在拥有的代码正在关闭连接,如果您打算将其传递给另一个线程,则需要保持其打开状态。

!编辑一些示例代码

public class Whatever {
    public static void main(String[] args) throws Exception {
        // ... do your frame thing

        loadDataBaseDriver();
        BoneCP connectionPool = createConnectionPool();

        try {
            final Connection connection = connectionPool.getConnection();
            ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();

            exec.scheduleAtFixedRate(new Runnable(){
                @Override
                public void run(){
                    System.out.println("Working ... ");

                    // use connection
                }
            }, 0, 1, TimeUnit.SECONDS);
        } catch (SQLException e) {
          // do whatever
        }
    }

    public static BoneCP createConnectionPool() throws SQLException {
        BoneCPConfig config = new BoneCPConfig();
        config.setJdbcUrl("jdbc:mysql://192.0.0.1:3306/database"); // jdbc url specific to your database, eg jdbc:mysql://127.0.0.1/yourdb
        config.setUsername("root"); 
        config.setPassword("");
        connectionPool = new BoneCP(config);
        return connectionPool;
    }

    public static void loadDataBaseDriver() {
        try {
            // load the database driver (make sure this is in your classpath!)
            Class.forName("com.mysql.jdbc.Driver");
        } catch (Exception e) {
            e.printStackTrace();
            return;
        }
    }

}

我不知道你调用的方法的签名所以错误可能是错误的

 类似资料:
  • 我在页面上有一个表,我需要从表中的特定单元格中读取值。我想把这些值写到excel文件中。问题是for loop只循环一次,并且只为Excel中的第一个单元格写入值。我试过很多不同的循环,在谷歌上搜索,但都找不到答案。请帮帮忙。下面是我要编写到Excel的代码: 这是我写入excel文件的地方 循环成功执行并从表中正确打印出值,但我需要将这些值写入Excel。似乎在excel中写入第一个值后,for

  • 我对python中双for循环的使用感到困惑,这是我的代码: 输出如下: 它只对外循环的第一个值执行内循环,为什么会发生这种情况?我怎样才能让它在第一个和第二个变量的所有组合上循环?

  • 我一直在读一本面向初学者的书,“第一头HTML5编程”,其中有这样一段代码: 目前,如果我调用,它将返回下一次显示是在下午5:00。我将循环条件更改为“I<=movie.showtimes.length;”但它仍然只运行一次,并且只显示下午5点。循环只迭代一次,即使我重写了这个函数: 不是应该跑两次吗?

  • 到目前为止,我的计划是: 现在我需要它做的是生成一个从华氏度到摄氏度的20个温度转换表。如果用户输入 0,下面是输出可能是什么样子的前 3 行的示例: 华氏温度:0摄氏度:-17.78 华氏度: 5 摄氏度: -15.00 华氏:10摄氏度-12.22度 等… 问题是,如果输入大于20,它将不会循环正确的次数。 下面是一个例子,说明如果用户输入5: 输出: 输入您的起始温度(华氏:5)。 华氏摄氏

  • 我发现这样的php代码: 我希望这个循环会执行4次,因为$I变成了对$的引用(对吗?)。然而,循环只执行一次,并输出: a=10,i=10 我不明白为什么它会这样工作。有什么想法吗?