私は伝統的なスレッドの実装に精通していますが、Executorserviceについてはあまりよく分かりません。私はexecutorサービスを使ってスレッドを扱うときにとても便利だと知っています。しかし、私はその実装についてほとんど混乱していません。ExecutorserviceはJavaでどのように動作しますか?
私は親スレッド/メインスレッドと最大スレッドプールサイズ10を持つExecutorサービスを持っているとしましょう。今は、サイズが1000未満の場合にのみjmsキューで特定のタスクを実行したいと思います。おそらく2つの方法でこれを実装すると思います。
ケース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");
}
}
ケース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;
}
}
}
}
私の理解では、複数のスレッドにまたがるませんケース2です。私は正しいかどうか?または、タスクを実行する別の方法がありますか?
'setWaitForTasksToCompleteOnShutdown'は、Springフレームワークの一部である - あなたは、そのコンテキストに求めていますか? – assylias
はい。それ以外の方法があれば大歓迎です。 – Satyaprakash
'checkQueueSize <= 1000'ステートメントは、ローカル変数 'checkQueueSize'が1000以下の場合、永遠にループします。ループ内の何も変数の値を変更することはできません。 –