兽兽哥,你好:
这是我的单例线程池,然后executeTask方法是传入一个线程job,里面的工作是:登录sftp的shell,取得session,然后触发我的nmap命令,但是我现在发现,线程启动了,取得了sftp的session后,遇到jetty stop正常关闭之后,sftp的session无法销掉,导致session创建之后,无法随着jetty的关闭而关闭。这样的一个问题,我觉得很致命的。举个例子,例如我运行了shell的3个进程,处于运行中状态,然后这个时候我jetty服务器关闭了,按正常道理应该会瞬间销掉线程里面的操作,包括sftp取得session。现在就是无法销掉,所以请兽兽哥观察,是不是我的单例线程池出问题了?
请兽兽哥,详细指导一下。
谢谢!
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import cn.com.venustech.modules.asset.service.thread.AssetScanJob;
/**
* AssetScanExecutor : 单例扫描任务线程池
*
* @author XXXXXXXXXXXXXXXX
*
*/
public class AssetScanExecutor {
/**
* 线程池
*/
private ExecutorService executor;
/**
* 任务调度器
*/
private static AssetScanExecutor _this;
private AssetScanExecutor() {
}
public static AssetScanExecutor getInstance() {
if (_this == null) {
_this = new AssetScanExecutor();
_this.executor = Executors.newFixedThreadPool(5);
}
return _this;
}
public void executeTask(AssetScanJob assetScanJob) {
executor.execute(assetScanJob);
}
public void done() {
executor.shutdown();
}
}