私は、C# SDK の Java バージョンを作成する任務を負っています。現在。私は C# System.ServiceProcess.ServiceBase を拡張するクラスに取り組んでいますが、Java で Windows サービスを作成するのが難しいため、クラスの他のメソッドのいくつかに焦点を当てています。
Java で複製しようとしている現在の C# メソッドは次のようになります。
private void StartProcesses()
{
// create a new cancellationtoken souce
_cts = new CancellationTokenSource();
// start the window timer
_windowTimer = new Timer(new TimerCallback(WindowCallback),
_cts.Token, 0, Convert.ToInt64(this.SQSWindow.TotalMilliseconds));
this.IsWindowing = true;
}
コードのこのセクションを分析した結果、SQSWindow ミリ秒ごとに WindowCallback 関数を実行する System.threading.Timer オブジェクトを初期化していると考えられます。
ある java.util.concurrent のドキュメントを読んだ後
http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/package-summary.html
タイマー機能に相当するものが見つからないため、Java で C# 機能を複製する方法がわかりません。Java ライブラリによって提供される TimeUnit は、スレッドのタイムアウトにのみ使用され、繰り返し操作を発行するために使用されないようです。
CancellationTokenSource の使用についても興味があります。このオブジェクトがアクションを続行するかどうかを判断するために照会されることを意図している場合、ブール値などのプリミティブではないのはなぜですか? それはどのような追加機能を提供しますか? また、Java のマルチスレッド モデルに同様の構造はありますか?