URLに特定の機能を実行するJava 8ベースのプロジェクトがあります。以下のコードスニペットを修正して、スレッド/プロセスを強制終了し、現在のプロセスステータスに関係なく一定時間後に次のインスタンスを実行できるようにする必要があります。Java 8:特定の時間の後にスレッドを終了/停止する
私は、スレッドキル手順を実装するには、次の方法を試してみました:
- キュータサービス
- タイマータスク
- マルチスレッドのスレッドが
私の最も最近の試みのためのコードスニペットがあるを殺しますリンク先
@SuppressWarnings("static-access")
public static void main(String[] args) {
//fetch url from the txt file
List<String> careerUrls = getCareerUrls();
int a = 0;
DBConnection ds = null;
ds = DBConnection.getInstance();
try (java.sql.Connection con = ds.getConnection()) {
//read a single Url
for (String url : careerUrls) {
int c = a++;
ExecutorService executor = Executors.newFixedThreadPool(3);
Future<?> future = executor.submit(new Runnable() {
@Override
// <-- job processing
public void run() {
long end_time = System.currentTimeMillis() + 10000;
System.out.println("STARTED PROCESSING URL: " + url);
jobareaDeciderSample w = new jobareaDeciderSample();
w.mainSample(url, c, con);
}
});
// <-- reject all further submissions
executor.shutdown();
try {
future.get(120, TimeUnit.SECONDS); // <-- wait 2 Minutes to finish
} catch (InterruptedException e) { // <-- possible error cases
System.out.println("job was interrupted");
future.cancel(true);
Thread.currentThread().interrupt();
;
} catch (ExecutionException e) {
System.out.println("caught exception: " + e.getCause());
} catch (TimeoutException e) {
System.out.println("timeout");
future.cancel(true);
}
// wait all unfinished tasks for 2 sec
if (!executor.awaitTermination(0, TimeUnit.SECONDS)) {
// force them to quit by interrupting
executor.shutdownNow();
}
}
} catch (Exception e) {
LOGGER.error(e);
}
}
を返す呼び出すことができ、あなたのために何もしません。あなたがそれに反応しようとするならあなた自身のスレッドの中断をテストするために.interrupted() 'を使います。これにより、ステータスもクリアされます。 'someThreadInstance.isInterrupted()'メソッドは、状態を監視するためのものです(あなたが別のスレッドから呼び出すことさえあるかもしれません)ので、ステータスは影響を受けません。 – Holger