我使用executorService使用此代码一次只执行一项任务
executorService=Executors.newSingleThreadExecutor();
我正在使用Thread.activeCount()
来获取活动线程的数量,但每当我向executorService提交一个可运行的任务时,活动线程的数量会增加1。怎么可能?
我认为newSingleThreadExecutor()
允许一次只执行一项任务。为什么线程数量不断增加?不应该只增加一个线程数而不是更多吗?
请注意,我甚至在提交新任务之前使用future
取消所有runnable的执行,并且它正常工作;所有runnable都被打断了。但是,活动线程的数量不断增加。
编辑:这是每当我按下按钮时调用的代码(Worker
只是一个实现runnable的类):
private void handle() {
executorService=Executors.newSingleThreadExecutor();
Worker worker=new Worker();
future=executorService.submit(new Worker());
}
答案 0 :(得分:2)
每次调用它时都会创建一个新的Executor。每个单线程执行程序都有自己的线程。如果要在该执行程序上执行多个作业,请调用newSingleThreadedExecutor一次,并将所有作业提交给该执行程序。你不要多次调用newSingleThreadedExecutor