順序を尊重してスレッドで多くのタスクを実行したいのですが、これがアプリケーションのメインスレッドです:
@Component
public class LogExtractorApp extends CommonApp implements Runnable {
UDPReceiver receiver = new UDPReceiver();
public static Map<String, Entity> select;
public static List<String> pdomain;
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
@Resource
MessagesCounts counters;
@Resource
DbUpdating update;
@Resource
DeleteData delete;
@Resource
ExcludeDomain domain;
@Override
public void run() {
select = counters.main();
pdomain = domain.main();
ExecutorService service = Executors.newCachedThreadPool();
service.execute(receiver);
scheduler.scheduleAtFixedRate(update, 5, 5, TimeUnit.MINUTES);
service.execute(delete);
}
}
アプリケーションを起動するときに必要なのは次のとおりです。
- カウンターのメイン メソッドを呼び出します。
- ドメインのメイン メソッドを呼び出します。
- スレッド「レシーバー」を起動します。このスレッドは、離れたサーバーから永続的にデータを受信します。
- スケジュールされたスレッドを起動して、5 分ごとにデータベースを更新します。
- カウンターの主な方法を思い出してください。(ここで、マップ「select」は、スレッド「レシーバー」によって呼び出されるメソッドで使用されることに言及します)。
- スレッド「delete」を起動して削除し、データベースから 1 日より古いすべてのデータを削除します。
*もちろん、三本の糸が永久に回転することを望んでいます*
私の質問: ステップ 1,2,3,4 は正常に動作しますが、「更新」スレッドの後に毎回「カウンター」のメイン メソッドを呼び出すようにアプリケーションに指示して、マップの値を更新する方法がわかりません ( "選択する")。そして、「削除」スレッドについては、上記のコードに示されている方法で追加していましたが、このようには機能しません。私の2つの質問に対する提案に感謝します.質問に他のコードを追加する必要がある場合は、コメントで教えてください.
ありがとうございました!