1

私は、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 のマルチスレッド モデルに同様の構造はありますか?

4

3 に答える 3

1

同等の Java クラスは ` TimerおよびTimerTaskです。

例:

Timer t = new Timer();
t.schedule(new TimerTask(){

    @Override
    public void run() {
        // Do stuff
    }

}, startTime, repeatEvery);

キャンセルできるようにしたい場合はTimerTask、 を変数として使用します。TimerTaskクラスにはメソッドがありますcancel

于 2013-06-07T19:22:06.973 に答える
1

ScheduledThreadPoolExecutorをご覧になることをお勧めします。これは、定期的にスケジュールする機能を持つScheduledExecutorServiceの実装です。

于 2013-06-07T19:23:53.577 に答える