問題タブ [countdownlatch]
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 - カウントダウンしようとすると同期がブロックされる
CountDownLatch を使用してこの投稿で見つけたアドバイスに従いましたが、問題が発生しています。私はこのテストを作成して実行し、ロック時に同期しようとするとブロックを作成したスレッドを実行しました。
なぜこれが機能しないのですか?
java - 複数のスレッドが機能しない
GUI インターフェイスでコードを実行しようとしています。しかし、メインの方法に進む前に、GUI ウィンドウをすべて閉じる必要があります (必要な情報の一部は GUI ウィンドウから収集され、その情報がないと残りのコードを実行できません)。そこで、CountDownLatch を使用して 2 つのスレッドを作成することにしました (そのうちの 1 つはメイン メソッドで、もう 1 つは GUI を処理するクラスです)。しかし、コードを実行すると、GUI の最後で動かなくなり、コードが先に進みません。誰かが私のコードの何が問題なのか知っていますか?
また、GUI の CountDownLatch のコードは次のとおりです。
}
java - join と CountDownLatch の違いは何ですか?
他のスレッドが終了するのを待つときは、 または のいずれかを使用できjoin
ますCountdownLatch
。これら 2 つのメカニズムのいずれかを使用することの長所と短所は何ですか?
java - 静的ラッチまたはセマフォを使用しても問題ありませんか?
Runnable インターフェイスを実装するクラスがいくつかあります。それらのそれぞれは、個別の SingleThreadExecutor を介して実行されます。実行ルーチンを変更することはできません。別の Runnables を提供することしかできません。
他の Runnables の結果に応じて、Runnables でいくつかの操作を行う必要があります。つまり、他のすべてのランナブルがその実行ポイントに達した場合にのみ、run() メソッド内で何らかの操作を実行したいと考えています。または、同じことをしている Runnables の数が 10 未満の場合にのみ、run() メソッド内でいくつかのルーチンを実行したいと考えています。
私が見る唯一の解決策は、静的変数 CountDownLatch と Semaphore を同期させることです。
私はこれを実装しましたが、不明な理由で、いくつかのランナブルがラッチまたはセマフォを待っている場合、いくつかのランナブルから始めて、SingleThreadExecutor は次のランナブルでスレッドを開始しません。たとえば、7 つの Runnables は開始しますが、他のものは開始しません。
私の質問: 静的ラッチまたはセマフォで同期する私のスキームは正しいものですか?
android - Android CountDownLatch.await()がUIを早期にフリーズする
だから私はCountDownLatchでいくつかのスレッドを実行しています。
私の問題は、latch.await()を呼び出すと、UIがハングしているように見え、事前に呼び出されたUIコマンドでさえ効果がないことです。例えば
最初の2行はUIに影響を与えません。
なぜこれが解決策であり、おそらく解決策であるのか、何か考えはありますか?ありがとう。
java - メソッドをJavaで新しいスレッドとして宣言する方法はありますか
乱数をリッスンするプログラムがあります。それは私に番号と新しいカウントを与えるパブリッシャーに接続されており、更新を取得するたびに、その番号の現在のカウントを HashMap に保存しています。
リクエストをリッスンするSSLサーバーもあります。「7 はいくつありますか」という要求があった場合、私は HashMap で値を返すだけです。
ここで、その数が 0 回発生した場合は、1 回発生するまで待機し、その時点でのカウントを返すというロジックを追加します。ただし、Thread の run メソッドの制限により、無効でなければならないという問題が発生しています。とにかく、メソッドを常に新しいスレッドを起動するものとして宣言するだけなのか、それとも私がやっていることよりもそれを処理するためのより良い方法があるのだろうか。ここに私が持っているものがあります:
ただし、run メソッドに return ステートメントを入れることはできません。では、これはどのように行うのが最善でしょうか?
ありがとうございました!
java - Java - COUNTDOWNLATCH でカウントする
各スレッドの実行中に、前のスレッドが既に countdown.countDown() を呼び出してラッチカウントを 1 減らした後でも、countdown.getCount() が常に「3」を出力するのはなぜですか?
3 つのスレッドすべてを解放できるように、ラッチ カウントが 0 に達したことを Java がどのように認識するかについては、ちょっとうんざりしています。
}
java - await()しようとするとCountDownLatchが例外をスローする
別のスレッド B を実行するスレッド A があります。スレッド A は、スレッド B をきれいに終了しようとするメソッド「stopExec()」を実装し、いくつかのタスクを終了できるようにします。したがって、私の stopExec メソッドは次のようになります。
スレッド B にはスレッド A への参照があり、「threadA.lock.countDown();」を呼び出します。それが何をしていたとしても終わったとき。
例外がスローされるとどうなりますか...スレッドAは待機せず、単に続行します。誰かが私になぜ/何が間違っているのか説明してもらえますか. 他のケースでも同様の方法で CountDownLatch を使用しましたが、期待どおりに機能しています。
ありがとうございました!
java - スプラッシュスクリーンを表示し、バックグラウンドでデータを読み込み、その後スプラッシュスクリーンを非表示にする方法は?
シンプルな JavaFX フォームを設計しています。
まず、JavaFX 環境をロードします (そして、終了するのを待ちます)。次のようにします。
これはうまくいきます。(最初にこの方法でJavaFXをロードする必要がある理由は、主にSwingアプリケーションであり、内部にいくつかのJavaFXコンポーネントが含まれているためですが、それらは後でロードされます)
ここで、起動時にスプラッシュスクリーンを追加し、JavaFX 環境のロード中にそれを表示したいと思います (実際には、アプリケーションのロゴや商標などがあるため、5 秒間画面に表示されます。示す必要があります)
そこで、次のように JWindow を画面に表示するだけの SplashScreen クラスを思いつきました。
ここで、スプラッシュ スクリーンをロードして 5 秒間表示したいと考えています。一方、JavaFX 環境もロードする必要があります。
だから私はこのように CountDownLatch を更新しました:
つまり、動作していますが、スプラッシュはJavaFX環境がロードされるまで残っているため、基本的には非常に迅速にアンロードされます(私が書いたコードを考えると、これは正常です)。
EDT をフリーズせずにスプラッシュ画面を最小 5 秒間表示する方法 (JavaFX の読み込みが速い場合) は?
ありがとう。
java - 2 番目のスレッドが実行されていないのはなぜですか?
私は喫煙者がエージェントを待つ3つのスレッドを持ちたい次のプログラムを持っています。これを実装するために CountDown ラッチを使用しようとしています。
何らかの理由で、次のコードで Pam.run を実行すると、latch.await でフリーズするだけで、残りのスレッドは実行されません。だから私の質問は、最初の3人の喫煙者がlatch.countdown();を待つようにするにはどうすればよいかということです。エージェント スレッドによって呼び出されます。