我有一个弹簧启动应用程序,我使用ScheduledExecutorService来创建单线程执行程序。在这个单线程中,我处理数据库记录。我获取了许多记录上的锁来处理它们,并希望在JVM关闭后立即释放锁。我试图注册一个JVM关机挂钩。关机时释放资源
// Create single threaded
ScheduledExecutorService executor;= Executors.newSingleThreadScheduledExecutor();
executor.scheduleWithFixedDelay(dbRecordProcessor, 1000, delay, TimeUnit.MILLISECONDS);
// Registering shutdown hook
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
logger.info("Executing shutdown hook.....");
executor.shutdown();
}
});
//
DbRecordProcessor implements Runnable {
public void run() {
try {
// get all the records from DB by acquiring lock
}catch(Exception e) {
}finally {
// Release the lock on record
}
// Acquire lock on records
// loop on them
// Process them
// Release the lock after processing
}
}
我想要的是,当调用JVM关闭挂钩时,必须释放获取锁的所有记录。我不能盲目地对所有记录“解锁”,因为某些记录可能被另一个实例锁定,所以我只想解锁由这个正在运行的实例锁定的那些记录。 我想通过调用“executor.shutdown()”知道它会释放所有记录的锁吗?请帮帮我。
那么究竟是什么问题或问题? – dunni
编辑了这个问题。 – rishi