ScheduledExecutorService只循环一次

我正在尝试实现一个每秒循环的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. } 

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; } } } 

我不知道您调用的方法的签名,因此错误可能是错误的