私は春のMVCアプリケーションを使用しています。次に実行しようとしていることは、自分のアプリケーションからバックグラウンドタスクを開始または送信することです。spring mvcアプリケーションからのバックグラウンドタスクの送信
基本的には、ユーザーがアプリで何か他のことをすることを決断したとしても、タスクが完了するまでその作業を続けていきたいと思います。
しかし、私は必要に応じてタスクを停止/停止/一時停止したいと思います。私はこれをやったことがないので、これを行う良い/良い方法を探しています。
私はこれらが有用であることが判明:
http://blog.springsource.com/2010/01/05/task-scheduling-simplifications-in-spring-3-0/
How do you kill a thread in Java?
だから私は私のバックグラウンドタスクを提出する@Asyncタスクを使用していたが、スレッドを使用していましたそれを後で入手し、必要に応じて停止させるためのIDですか?
これは正しいアプローチですか?私はマルチスレッドの経験がないので、私はここに来て聞いています。
コードの更新:
public interface Worker {
public void work();
public void cancel();
}
実装:
@Component("asyncWorker")
public class AsyncWorker implements Worker {
@Async
public void work() {
String threadName = Thread.currentThread().getName();
System.out.println(" " + threadName + " beginning work");
try {
Thread.sleep(10000); // simulates work
} catch (InterruptedException e) {
System.out.println("I stopped");
}
System.out.println(" " + threadName + " completed work");
}
public void cancel() { Thread.currentThread().interrupt(); }
}
コントローラテスト目的のために:私は/job/start
にアクセスすると
@ResponseBody
@RequestMapping("/job/start")
public String start() {
asyncWorker.work();
return "start";
}
@ResponseBody
@RequestMapping("/job/stop")
public String stop() {
asyncWorker.cancel();
return "stop";
}
、私は1つ以上を実行することはできませんタスクを同時に実行する。もう1つは、最初に完了した後に実行を開始します
/job/stop
にアクセスしたときにプロセスが停止していない場合、私はここで何が欠けていますか?
+1の@Async。 http:// staticへのリンクを追加できますか?springsource.org/spring/docs/3.0.x/reference/scheduling.html? –
@Tomasz Nurkiewiczよろしくお願いします。 'fooAsync()'の実装を実際に含むクラスは、Runnableを実装する必要がありますか?バックグラウンドタスクを実行しているスレッドを中断するcancelメソッドを作成した場合、Thread.currentThread()。interruptはその特定のスレッドを中断しますか?あなたは例を挙げてもらえますか? –
@DavidGrant:確かに、あなたもSO上の投稿を自由に編集することができます。 –