問題タブ [scheduledexecutorservice]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1351 参照

java - 参照を保持せずに、ScheduledExecutorService で実行されているタスクを取得できますか?

私は現在ScheduledExecutorService、 の代わりにを使用するようにアプリケーションを変更しています。以前は、保持Timerした を使用してスケジュールされたタスクにアクセスしていましたが、タスクにアクセスするだけでなく、タスクにアクセスすることもできました。Mapcancel()

この API ではMap、2 つの を維持する必要があるようです。1 つはタスクにアクセスするため、もう 1 つSheduledFuture<?>は によって返されschedule()た をキャンセルできるようにするためです。

私はこの投稿を読みましたが、私がしたことと比較して実装するのは非常に重いようですTimer(1 つだけMapが必要でした)。

これは、アクセスしてキャンセルする必要がある 2 つのタスクを持つ単純なアプリケーションです。

私が取得できなかったものはありますか、それとも「Executor は、この単純なものに必要なものではありませんか?」

0 投票する
1 に答える
135 参照

java - ScheduledExecutorService が shutdownNow のときにメッセージが失われるのはなぜですか

私の Web アプリでは、実行可能なインスタンスを ScheduledExecutorService に送信します。実行可能なインスタンスでは、receiveNoWaitメソッドを使用してIBM MQからメッセージを受信し、セッションはCLIENT_ACKNOWLEDGEモードになっています。ScheduledExecutorService の shutdownNow メソッドを呼び出すと、acknowledge メソッドを呼び出さずに receive メソッドがメッセージを失うことがあります。何か提案はありますか? メッセージを受信するコードは次のとおりです。

{
ScheduledExecutorService shutdownNow の場合、例外なく最初のログ情報しか表示されません。

logger.info("获取消息");

メッセージ msg = consumer.receiveNoWait();

logger.info("获取消息成功");

メッセージを返します。

キャッチ(スロー可能なe){

logger.error("处理数的時候出现异常", e);

null を返します。

}

0 投票する
2 に答える
1443 参照

mysql - Java のスケジュールされたスレッドがデータベースを強制終了します

ツール: Spring 3.0、Hibernate 2.0、Java 6

同様のスレッドのほとんどは、不足しているライブラリのインストール、構成ファイルの修正などを提案しましたが、私のプロジェクトは完全に正常に動作しています。1 つのモジュールが問題を引き起こしている

やりたいこと:アプリケーションの起動時にスレッドを作成します。ユーザー リクエストを Web アプリに記録し、キューに入れます。スレッドは 60 秒ごとにキューを読み取り、トランザクション メソッドを呼び出してキューを永続化します。

データ構造: ConcurrentLinkedQueue - Bean の作成時に一度だけ初期化される

の定義init()

The Thread:別のクラスでは、スレッドは 60 秒の固定時間間隔の後に実行されるようにスケジュールされています。

持続性:の定義save()

アプリケーション ログ:

アプリケーションは、ローカル マシンでは問題なく実行されますが、サーバー (Amazon AWS bitnami tomcatstack) では数時間後にアプリが実行されます。データベース(MySQL)にアクセスできません。どうやら、MySQL は死んでいます。孤立した接続が多すぎるか何かが原因である可能性がありますが、私はまだそれを理解していません.

mysql -u root -pこのエラーが発生しますERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/bitnami/mysql/tmp/mysql.sock' (2)

スタックトレース:

それが理にかなっていることを願っています。

0 投票する
1 に答える
93 参照

java - アプリサーバーでさまざまな数の時間指定ジョブを処理する方法

私は、システムに入って顧客にデータを表示するために、hibernate、spring、および jpa で glassfish を使用しています。

ただし、受信データに基づいてデータを計算するために、毎分複数のジョブを実行する必要もあります。

しかし、ジョブの数はわかりません。また、ジョブはデータベースから取得されるため、いつでも変更される可能性があります。x 人の顧客がいて、各顧客は 1 つから複数の仕事を持つことができます。

だから私が本当にする必要があるのは:

  1. テーブルから読み取って、実行するジョブの数を取得します
  2. これらのジョブを毎分実行する
  3. ジョブがテーブルから削除された場合、そのジョブの処理を停止します
  4. ジョブがテーブルに追加された場合は、新しいジョブをリストに追加します。
  5. これらの各ジョブは、テーブルから読み取り、いくつかの計算を行い、結果をテーブルに書き込みます。

いくつかのツール (quartz、ScheduledExecutorService など) について調べましたが、実際にこの機能を提供するものはありますか? それとも自分で書く必要がありますか?

0 投票する
0 に答える
228 参照

tomcat - tomcat に ScheduledExecutorService をデプロイする

私は、これを機能させるためにあらゆる場所にある Beeper Control の例を使用してきました。動作しますが、これを Tomcat サーバーに統合する必要があります。リスナーを使用して web.xml ファイルに追加する必要があることはわかっていますが、ステップバイステップのチュートリアルはありますか? または、誰かがそれを展開する手順を教えてもらえますか?

ありがとう

0 投票する
2 に答える
1356 参照

java - scheduleExecutorService.shutdown が呼び出されなかったために失敗するテストを作成する方法は?

をコラボレーターとしているユニットで TDD を行っていScheduledExecutorServiceます。このユニットには、start基本的にタスクでエグゼキューターを開始するメソッドがあり、メソッドを駆動するテストを書きたいと思います。誰もスレッドstopを呼び出さないScheduledExecutorService.shutdownとハングすることがわかっているからです (デフォルトではデーモン スレッドではありません)。

実際のエグゼキューター サービス (決定論的なものではない) を使用してユニットを構築することでこれを実行したかった@Test(timeout = 5000L)のですが、直面している問題は、何らかの理由でテストがハングしないことです。
確かではありませんが、これは Intellij/Junit mix 呼び出しsystem.exitと「my」jvm の強制終了に関連していると思います。

メソッドを使用して書いた手動の「テスト」では、mainメソッドを呼び出さずshutdownにシステムが実際にスタックしていることを確認できます。

これをテストする方法についてのアイデアはありますか?

ありがとう

更新
問題を説明する小さなコード サンプルをまとめました。