我正在尝试实现一个每秒循环的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.
}
答案 0 :(得分:3)
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;
}
}
}
我不知道您正在调用的方法的签名,因此可能会出错 是错的