問題タブ [threadpoolexecutor]
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.
java - Java で Executor を使用してファイルを書き込む
私はList<Map<String,String>>
ieを持っています。マップのリスト。各マップにはFile Name
asKey
とFile Content
asがありValue
ます。
上記のリストには 25 万ルピー以上のマップがあります。私の要件は、このリストを反復処理し、各マップ キーと値を読み取る出力フォルダーにファイルを作成することです。したがって、最終的には 250 万個のファイルが作成されます。4時間以上かかります。次に、プログラムを停止します。25lakh のレコード全体に対してプログラムを実行した場合にかかる正確な時間はわかりません。
マルチスレッドを使用してこれを最適化する必要があります。
Javaを使用してこれを最適化するにはどうすればよいですかExecutors/ Fork/ Join
(私は持っていますJava 7
)
android - Asynctask の速度と ExecutorService の同じプロセス
私のアプリは、応答するデバイスのサブネットをスキャンする必要があります (特定のサービスのポート 80/8080 を確認します)。executorservice/threadpool を使用してスキャン タスクを完了していましたが、完了までに約 30 秒かかりました。
上記のプロセスを asynctask を使用するように書き直しました - プロセスにかかる時間が大幅に長くなりました (数分)。
元の executorservice に戻り、このプロセス全体を妥協案として asynctask にラップしました (したがって、UI をブロックせず、迅速に完了します) が、これがベスト プラクティスであるとは思えません。また、進行状況の更新、キャンセルなどの問題も発生します。
UIの更新/キャンセル可能な機能を提供するより遅いプロセスを使用するのが最善ですか、それとも(プロセス全体で30秒しかかからないため)-より高速なエグゼキューターサービスを使用しますか?
ありがとう。
java - LinkedBlockingQueue を使用した ExecutorService と ThreadPoolExecutor の比較
負荷とパフォーマンスのテストを行っているため、クライアント コードのエンド ツー エンドのパフォーマンスを測定するために複数のスレッドを生成する必要があるマルチスレッド プロジェクトに取り組んでいます。そこで、を使用している以下のコードを作成しましたExecutorService
。
以下はコードですExecutorService
:
問題文:
今、私はインターネットでいくつかの記事を読んでいました。もあることがわかりましたThreadPoolExecutor
。そのため、どちらを使用すればよいか混乱しました。
上記のコードを次のコードから置き換えると:
に:
これは何か違いがありますか?ExecutorService
を使用して元のコードと を使用して貼り付けた新しいコードの違いを理解しようとしていThreadPoolExecutor
ます。私のチーム メイトの何人かは、2 番目のもの (ThreadPoolExecutor) が正しい使用方法であると言いました。
誰かが私のためにこれを明確にすることができますか?
java - Java - スレッドプール
スケジュールされたスレッド プール--->
スレッド 1 --->
スレッド2--->
Thread 1
10秒ごとに実行されています。Thread 2
30分後に開始することになっています。
Thread 1
Thread2
は、30 分後に開始することが期待されている場所で、1 時間後に開始する期待どおりに動作しています。
のレイテンシがthread1
この問題の原因ですか?もしそうなら、thread2
スレッド プールにスレッドが 1 つしかないことを考えると、スレッド 1 が終了したときにスレッド 1 が優先されるはずです.なぜThread2
ストレッチが長すぎて 1 時間後に開始できないのですか?
私は無知で、いくつかの指針を期待しています。助けてください。
java - PriorityBlockingQueue に基づく ThreadPoolExecutor が機能していないようです
サーバーから取得する画像が多数あり、他の画像よりも優先度の高い画像を取得したいので、実装ThreadPoolExecutor
する a を返す独自のものFutureTask
を実装しComparable
ましたが、機能していないようです。タスクは、キューに追加した順序で多かれ少なかれ処理されます。BlockingQueue
myの をデバッグしたところ、myを優先度の高いものThreadPoolExecutor
に追加すると、キューの一番上に移動されないことがわかりました。Runnable
ここにコードがあります
そして、次の方法でタスクをプールに追加します。
私のBitmapLoaderRunnable
実装Comparable
と、メソッドをデバッグするときにcompareTo
呼び出されます。私は何を間違っていますか?ありがとう
編集:以下は私のランナブルのコードです
java - ThreadPoolExecutor.worker.run に時間がかかりすぎる
で実行したいくつかのタスクがありCachedThreadPool
ます。いくつかのプロファイリングの後、タスク自体は 10% の時間しか実行されず、残りの 90% はthreadpoolexecutor$worker.run
(私はjvisualvm
プロファイリングに使用しています) によって使用されていることがわかりました。
そして、ここで私は立ち往生しています。一体何をしているのかthreadpoolexecutor$worker.run
、なぜそんなに時間がかかるのか、問題を解決する方法がわかりません。タスクをできるだけ速く実行する必要があります。
それがプロファイラーが言うことです:
スレッドSelf time
が眠っているということでしょうか?
前もって感謝します。PS 愚かで申し訳ありませんが、私は優れた Java プログラマーではありません。
java - スレッドが終了したときの ThreadPoolExecutor のクリーンアップ
いくつThreadPoolExecutor
かのコアと特定の最大数のスレッドを実行するがあります。実行されるタスクは、スレッドごとに HornetQ (スタンドアロン) 接続を作成し、スレッドの実行中に接続を維持します。keepAliveTime
ただし、スレッドの有効期限が切れてスレッドが死ぬと、それらを閉じることはできません。スレッドが死ぬ直前にリソースをクリーンアップする方法はありますか?
これを解決する 1 つの方法は、HornetQ 接続にプーリング ソリューションを使用することです。
どんな提案でも大歓迎です。