問題タブ [futuretask]

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 に答える
465 参照

threadpool - ExecutorService への Callable の送信が完了しない

私が直面している問題は、今から 1 週間悩まされています。ここにあります。CSV ファイルからデータを読み取って検証し、次のように配列リストに格納することで、CSV ファイルを処理するクラス AdminBlocageBackgroundProcessing.java があります。

}

そして、次を使用してアクションクラスから呼び出しています:

ここでの問題は、CSV のデータが多すぎることです。クリックしてインポートすると、プロセスがバックグラウンドで非同期に開始されますが、jsp で自動更新を使用してセッションを維持しているにもかかわらず、プロセスが完了することはありません。コードが小さなデータに対して正常に機能しているにもかかわらず、それが完了したことを確認するにはどうすればよいでしょうか?
しかし、大規模なデータの場合、この機能は崩壊し、監視できません。

私が使用しているスレッドプールは、コンテナによって提供されます:

}

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

java - ScheduledThreadPoolExecutor でキャンセルされたタスクを再開する

ScheduledThreadPoolExecutorでタスクを作成し、ThreadFactory クラスで以下のように Future をリストに追加しています。

すべてのタスクをキャンセルしたいときは、以下のようにします

後でこれらのタスクを再開するにはどうすればよいですか?

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

java - FutureTask が非同期計算である方法

メインでこれを行うと、新しいスレッドが作成され、非同期計算のためにタスクが送信されます。

FutureTask のドキュメントを見ると、次のようにも書かれています。

キャンセル可能な非同期計算。このクラスは、Future の基本実装を提供し、計算を開始およびキャンセルするメソッド、計算が完了したかどうかを照会するメソッド、および計算の結果を取得するメソッドを備えています。

では、内部でスレッドを作成し、インスタンス化時に指定したタスクを次のようにサブミットする方法FutureTaskは次のとおりです。asynchronous computationFutureTask

それ以外の場合は非同期計算にすることはできません。非同期計算にするために、タスクをスレッドに送信するFutureTask ソース コードのコード スニペットを提供してください。ありがとう。


答えがわかりました。基本的に、呼び出し元と同じスレッドでタスクを実行しようとしています。与えられたコードでそれはかなり明白です:

あなたがfutureTask.run()それを呼び出すsync.innerRun();sync、内部クラスのインスタンスが呼び出されますSync。つまりcall()、同じスレッドで呼び出し可能なオブジェクトを呼び出すだけです。

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

java - How do I interrupt a thread given a Future object?

I want to start a thread and cancel it if it doesn't finish within 5 seconds:

However it looks like the awaitTermination returns false. Is there a way for me to check why an ExecutorService won't terminate? Can I figure out what threads are still running?

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

java - マップが存在するときはいつでもマップからデータを取得する方法は?

以下は、バックグラウンドスレッドを開始する私の工場コードですTempScheduler-

これで、顧客は上記のファクトリを使用してこのようにコードを呼び出します。彼らは Client インスタンスを一度だけ取得し、そのインスタンスを使用しreadて実装内のメソッドを呼び出します -

以下は、URL からデータを取得し、解析してクラス変数に格納するバックグラウンド スレッド コードです。

URL からのデータを解析した後、上記のバックグラウンド スレッドはClientData、セッターを使用してクラスの変数に結果を格納します。以下は私のClientData classです。

問題文:-

ここで興味深い部分があります。ご覧のとおり、顧客は上記のファクトリを使用してコードを呼び出し、getInstance()メソッドを呼び出すとすぐに、URL からデータを取得して解析するバックグラウンド スレッドが開始されます。クラス変数に格納します。しかし、getInstance()メソッドが実行された後、彼らはread method私のクライアントコードで即座に呼び出しを行います..

そして、実装コードでバックグラウンド スレッドによって設定された変数を使用することになっています。readメソッドを使用する私の実装コードはCallableTaksfuture.get自動的にcall以下のメソッドになります。以下のクラスでは、バックグラウンド スレッドによって設定された変数値を使用することになっています。getPrimaryMapping以下のコードでメソッドを使用して値を取得する必要があります。

このアプローチの問題は、顧客がインスタンスを取得するために初めてファクトリを呼び出すとすぐに、URL からデータを取得して解析し、データをクラス変数に格納するバックグラウンド スレッドを開始することですが、それはread私の実装クラスのメソッドを即座に呼び出します..

これで初めて、バックグラウンド スレッドがまだデータを解析しているが、実際の呼び出しが 内に来て、メソッドcall methodからデータを取得しようとするが、getPrimaryMapping何もない可能性がありますよね? なぜbcozはまだデータを解析しています..では、解析が完了したら、顧客がコードを呼び出すときはいつでも、呼び出しメソッドで変数値のみを取得できるようにするにはどうすればよいですか。

そして、2回目は大丈夫です..データはメモリにあるので、最初の時間だけが問題です..

これを行う方法はありますか?

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

java - ある FutureTask からその Callable によって使用される別の依存するものにタイムアウトを伝播する方法は?

私は次のような状況です (おそらく、すべてをオーバーエンジニアリングしたか、完全に行き詰まりましたが、それを行う別の方法を考えることができません):

  • FutureTask非同期計算 (さまざまな種類の統計情報を伝達するマルチキャスト パケットをネットワークでリッスンすること) を実現する1 つまたは複数を取り、名前を付けますMulticastStatisticsProvider
  • FutureTaskこの最初のタスクに依存する別の計算を行って、追加の計算を実行します (統計と数式を組み合わせて、いくつかの合成情報を公開します)。この計算も非同期であるため、別のFormulaComputing.
  • 問題:呼び出し時にFormulaComputing.get(timeout, timeUnit)タイムアウトを内部に伝播させたいのですが、これを達成する方法が見つかりません。CallableMulticastStatisticsProvider.get(timeout, timeUnit)

以下、これまでに達成したコードの状態:

  • これが発信者コードです。

    /li>
  • これはFormulaComputingコードです:

    /li>

私は自分のカスタムメソッドで手作りの私的な内部syncフィールドを変更するためにイントロスペクションを通過することを想像しましたが、イントロスペクションとリフレクションは一般的に回避可能なハックです.FutureTaskCallableget

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

android - Android: FutureTask を MyClass にキャストできません

状況: 関数がスレッドを呼び出して、サーバーにデータを送信します。このスレッドはさらに別のスレッドを生成し、ObjectInputStream() を使用してサーバーから結果を取得します。

最後に、このオブジェクトは、生成されたスレッドによって呼び出し元の関数に返されます。

注: スレッドは呼び出し可能であり、同期されています。

問題: 「FutureTask を MyClassName にキャストできません」という例外が発生します。

Web上でこれに対する解決策が見つかりませんでした。助言がありますか ?

クライアントコード:

onclick() メソッド。

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

java - AWT スレッドの識別

Swing から JTextComponent を装飾するクラスがあります。含まれているメソッドはどのスレッドからでも呼び出すことができるため、JTextComponent で動作するコードが AWT スレッドによって実行されるようにする必要があります。

2 番目の要件は、AWT スレッドがタスクを処理するまで、メソッド全体を呼び出すスレッドが「待機」することです。

コードはうまく機能していますが、まだ 1 つの問題があります。私のクラスを使用したい人が AWT スレッドの名前を変更すると、デッドロックに陥ります。

AWT スレッドを明確に識別し、この問題を回避する方法はありますか?

ありがとうございました