特定のソース(たとえばKafka)から消費していて、定期的に収集したメッセージを(たとえばS3に)ダンプしています。 - consume
とdump
私は2つのスレッドを持ちたいJavaがクラス内で複数のスレッドを開始する
public class ConsumeAndDump {
private List<String> messages;
public ConsumeAndDump(){
messages = new ArrayList<>();
// initialize required resources
}
public void consume(){
// this runs continuously and keeps consuming from the source.
while(true){
final String message = ...// consume from Kafka
messages.add(message);
}
}
public void dump(){
while(true){
final String allMessages = String.join("\n", messages);
messages.clear(); // shown here simply, but i am synchronising this to avoid race conditions
// dump to destination (file, or S3, or whatever)
TimeUnit.SECONDS.sleep(60); // sleep for a minute
}
}
public void run() {
// This is where I don't know how to proceed.
// How do I start consume() and dump() as separate threads?
// Is it even possible in Java?
// start consume() as thread
// start dump() as thread
// wait for those to finish
}
}
次のように私のクラス定義があります。 consume
は継続的に実行する必要がありますが、dump
は定期的にウェイクアップしてメッセージをダンプし、バッファをクリアしてから再びスリープ状態に戻ります。
スレッドとしてconsume()
とdump()
を開始する際に問題が発生しています。正直なところ、私はそれをどうやって行うのか分かりません。メンバーメソッドをスレッドとして実行できますか?または、の別のRunnable
クラスを使用して、とダンプを消費する必要がありますか?もしそうなら、それらの間でどのようにmessages
を共有するのですか?
古典的なプロデューサーのコンシューマーのシナリオがあるようですが、[ソフトウェアエンジニアリングに関する質問からの私の答え](https://softwareengineering.stackexchange.com/a/337332/250821)が役立つかもしれません。 –