ExecutorService
スレッドごとにタイムアウトまたは割り込みを提供できる実装を作成しようとしています。
以下の例では、スポーンしていると2 threads
します (実際のシナリオでは、この数は高くなりますeach thread
) 10 minutes
。つまり、Thread1 will run for 10 minutes
とThread2 will run for 10 minutes as well
. 10 分が経過した場合は、スレッドを中断するか、タイムアウトする必要があります。
以下は私がこれまでに持っているコードであり、このinterrupt or timeout
機能をここにきれいな方法で追加する方法を理解できないためno of threads
、コードでこのパラメーターを構成可能にすると、そこでも適切に機能するはずです。
public static void main(String[] args) {
final int noOfThreads = 2;
final long exp_time_millis = 600000; //10 minutes
//create thread pool with given size
ExecutorService service = Executors.newFixedThreadPool(noOfThreads);
for (int i = 0, i< noOfThreads; i++) {
service.submit(new ThreadTask());
}
}
class ThreadTask implements Runnable {
@Override
public void run() {
while(true) {
System.out.println("Thread running...");
try {
/* make a select sql to the database
* and measure how much time it is taking in
* returning the response
*/
} catch (InterruptedException e) {
}
}
}
}
どんな提案でも大いに役立ちます。
SO に関する記事はほとんど見たことがありませんが、シナリオに一致するものを見つけることができず、簡単に実装できます。
更新されたコード:-
以下のコードを試していますが、run メソッドの catch ブロックでエラーが発生します。私が何か間違ったことをしているかどうかはわかりません。誰でも私を助けることができますか?
public class ThreadTimeout {
public static void main(String[] args) {
final int noOfThreads = 2;
//create thread pool with given size
ExecutorService service = Executors.newFixedThreadPool(noOfThreads);
ScheduledExecutorService scheduleService = Executors.newScheduledThreadPool(noOfThreads);
for (int i = 0; i< noOfThreads; i++) {
final Future future = service.submit(new ThreadTask());
scheduleService.schedule(new Runnable(){
public void run(){
future.cancel(true);
}
}, 10, TimeUnit.MINUTES);
}
}
}
class ThreadTask implements Runnable {
@Override
public void run() {
//make a database connection
while (true) {
System.out.println("Thread running...");
try {
/*
* make a select sql to the database and measure
* how much time it is taking in returning the
* response
*/
} catch (InterruptedException e) {
}
}
}
}