2016-04-28 12 views
3

私は3つの別々のクラスで3つのスケジュール設定の方法があります:アプリでSpringの@Scheduledアノテーションはどのように機能しますか?私のアプリで

@Component 
public class ClassA { 
@Scheduled(fixedDelay = 5000L) 
    public void methodA(){ 
     //do task "A" 
    } 
} 

@Component 
public class ClassB { 
@Scheduled(fixedDelay = 5000L) 
    public void methodB(){ 
     //do task "B" 
    } 
} 

@Component 
public class ClassF { 
@Scheduled(fixedDelay = 5000L) 
    public void methodF(){ 
     //do task "F" 
    } 
} 

は、このようなラインがあるのApplicationContext:

<task:annotation-driven executor="myExecutor" scheduler="scheduler"/> 
<task:executor id="myExecutor"/> 
<task:scheduler id="scheduler"/> 

が、私は、ログファイルからそれを把握することはできませんので、ここに私の質問があります:

  • これらのメソッドはどのように実行されますか?並行してまたは連続して?連続している場合は、どのように並列に動作するように再構成できますか?
  • この疎結合は(各方法について)マルチスレッド化されているかどうか(また、再構築されない場合はどのように変更できますか)

答えて

3

バックグラウンドでjava Executor APIを使用します。 あなたが知る必要があるものはすべてdocumentation

です。基本的にTaskExecutorの実装を選択し、必要な処理スレッドの数を設定します。

例では、3つの方法が5秒の固定遅延で連続して実行されます。しかし、処理スレッドを1つしか定義せず、1つのメソッドが長時間かかる場合、他の2つのメソッドの実行は延期されます。 @Scheduledで実行されている他の関数に依存したくない場合は、この例では3つの処理スレッドが必要です。

関連する問題