我熟悉传统的线程实现,但对Executorservice不太确定 . 我知道使用执行程序服务处理线程非常方便 . 但我对它的实施并不感到困惑 .
假设我有一个父线程/主线程和一个具有最大线程池大小为10的 Actuator 服务 . 现在我想在jms队列上执行某个任务,只要它的大小小于1000.所以现在我可能会想到以两种方式实现这一点 .
case 1:
class MyThreadClass inmplements Runnable {
public static void main(String args[]){
while(true){
int checkQueueSize = jmsQueue.getSize();
while(checkQueueSize<1000){
threadPoolTaskExecutor.execute(this);
++checkQueueSize;
}
}
}
public void run(){
jmsQueue.pushMessage("Hello Thread");
}
}
case 2:
class MyThreadClass inmplements Runnable {
public static void main(String args[]){
threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
threadPoolTaskExecutor.execute(this);
}
public void run(){
while(true){
int checkQueueSize = jmsQueue.getSize();
while(checkQueueSize<1000){
jmsQueue.pushMessage("Hello Thread");
++checkQueueSize;
}
}
}
}
我的理解是 case 2 不会跨越多个线程 . 我是否正确?或者还有其他方法来执行任务吗?
2 回答
"case 2 will not span more than one thread"是的 . 这是对的 . 因为你只召唤一次
execute
.在第一种情况下,您可以多次调用
execute
. 如果以前的任务没有完成,额外的线程将被破坏 .请找我的代码: -
修改:-
创建10个线程,并通过传递Runnable类对象将它们分配给运行作业 .
删除不必要的while循环,因为外循环执行infite itaration .