タグ付けされた質問 「multithreading」

マルチスレッドとは、複数の同時実行ストリーム(一般にスレッドと呼ばれる)を利用して、コンピューターまたはプログラムが作業を同時にまたは非同期に実行する機能です。

8
Android:いつHandler()を使用し、いつスレッドを使用する必要がありますか?
長期実行タスクやネットワークを使用するロジックなど、非同期で実行する必要がある場合、または何らかの理由で、新しいスレッドを開始して実行すると正常に動作します。ハンドラーを作成して実行することもできます。違いは何ですか?それぞれをいつ使用すればよいですか?a ではなくa を使用する利点/理由は何ですか?HandlerThread PS。-この質問のために、無視しましょうAsyncTask。- Handler().postDelayed使用例は私には明らかです。この質問のために、タスクをすぐに開始する必要があると仮定しましょう。

12
IllegalMonitorStateExceptionなしでJavaで待機と通知を使用する方法
2つの行列があり、それらを乗算して、各セルの結果を出力する必要があります。1つのセルの準備ができたらすぐに印刷する必要がありますが、たとえば[2] [0]の結果が最初に準備できたとしても、セル[2] [0]の前に[0] [0]セルを印刷する必要があります。ですから、注文順に印刷する必要があります。したがって、私の考えはmultiplyThread、正しいセルを印刷する準備ができたことをが通知するまでプリンタスレッドを待機させ、次にprinterThreadがセルを印刷して待機に戻る、などです。 だから私は乗算を行うこのスレッドを持っています: public void run() { int countNumOfActions = 0; // How many multiplications have we done int maxActions = randomize(); // Maximum number of actions allowed for (int i = 0; i < size; i++) { result[rowNum][colNum] = result[rowNum][colNum] + row[i] * col[i]; countNumOfActions++; // Reached …



13
Javaスレッドに別のスレッドの出力を待機させる方法は?
私は、application-logic-threadとdatabase-access-threadを使用してJavaアプリケーションを作成しています。どちらもアプリケーションの存続期間全体にわたって持続し、両方を同時に実行する必要があります(1つはサーバーと通信し、1つはユーザーと通信します。アプリが完全に起動すると、両方が動作する必要があります)。 ただし、起動時には、アプリスレッドが最初にdbスレッドの準備ができるまで待機することを確認する必要があります(現在、カスタムメソッドのポーリングによって決定されdbthread.isReady()ます)。アプリケーションのスレッドがdbスレッドの準備ができるまでブロックしてもかまいません。 Thread.join() 解決策のようには見えません-dbスレッドはアプリのシャットダウン時にのみ終了します。 while (!dbthread.isReady()) {} 一種の作品ですが、空のループは多くのプロセッササイクルを消費します。 他のアイデアは?ありがとう。


8
Thread.Sleepがなぜ有害なのか
Thread.Sleep();使用すべきでないと記載されているのをよく目にしますが、なぜそうなのか理解できません。場合はThread.Sleep();、トラブルを引き起こす可能性があり、安全であるのと同じ結果に任意の代替ソリューションがありますか? 例えば。 while(true) { doSomework(); i++; Thread.Sleep(5000); } 別のものは: while (true) { string[] images = Directory.GetFiles(@"C:\Dir", "*.png"); foreach (string image in images) { this.Invoke(() => this.Enabled = true); pictureBox1.Image = new Bitmap(image); Thread.Sleep(1000); } }
128 c#  multithreading  sleep 

15
C#でスレッドプールを使用する場合 [閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 この質問を改善する 私はC#でマルチスレッドプログラミングを学習しようとしていますが、自分のスレッドを作成するのではなく、スレッドプールを使用するのが最適な場合について混乱しています。1つの本では、小さなタスクのみにスレッドプールを使用することをお勧めします(それが何であれ)。しかし、実際のガイドラインを見つけることができないようです。このプログラミングを決定するときに使用する考慮事項は何ですか?


13
サイズ制限付きのキャッシュスレッドプールを作成することはできませんか?
作成できるスレッドの数に制限を設けて、キャッシュされたスレッドプールを作成することは不可能のようです。 静的なExecutors.newCachedThreadPoolが標準Javaライブラリにどのように実装されているかを次に示します。 public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); } したがって、そのテンプレートを使用して、固定サイズのキャッシュされたスレッドプールを作成します。 new ThreadPoolExecutor(0, 3, 60L, TimeUnit.SECONDS, new SynchronusQueue<Runable>()); これを使用して3つのタスクを送信すると、すべてが正常になります。さらにタスクを送信すると、拒否された実行例外が発生します。 これを試す: new ThreadPoolExecutor(0, 3, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runable>()); すべてのスレッドが順次実行されます。つまり、スレッドプールがタスクを処理するために複数のスレッドを作成することはありません。 これはThreadPoolExecutorの実行メソッドのバグですか?または、これは意図的なものですか?または他の方法がありますか? 編集:私はキャッシュされたスレッドプールとまったく同じものを求めます(オンデマンドでスレッドを作成し、タイムアウト後にそれらを強制終了します)が、作成できるスレッドの数に制限があり、追加のタスクをキューに入れ続けることができますスレッドの制限に達しました。sjleeの回答によると、これは不可能です。ThreadPoolExecutorのexecute()メソッドを見ると、実際には不可能です。SwingWorkerと同じようにThreadPoolExecutorをサブクラス化してexecute()をオーバーライドする必要がありますが、SwingWorkerがそのexecute()で行うことは完全なハックです。

7
Syncではなくreactjs AsyncでsetStateを使用するのはなぜですか?
私はちょうどthis.setState()任意のコンポーネントの反応関数が非同期であるか、それが呼び出された関数の完了後に呼び出されることを発見しました。 今、私はこのブログを検索して見つけました(setState()State Mutation Operation May Resyncous In ReactJS) ここで彼はそれを発見しました setStateは、状態の変化がどのようにトリガーされたかに応じて、非同期(スタックが空のときに呼び出される)または同期(呼び出されるとすぐに呼び出される)。 今これら二つは消化するのが難しい ブログでは、setState関数は関数内で呼び出されますupdateStateが、updateState関数をトリガーしたのは、呼び出された関数が知っているものではありません。 setStateJSが単一スレッド言語であり、このsetStateがWebAPIまたはサーバー呼び出しではないため、なぜJSのスレッドでのみ実行する必要があるのか、なぜ非同期になるのでしょうか。彼らはこれを行っているので、再レンダリングによってすべてのイベントリスナーなどが停止することはありませんか、それとも他の設計上の問題があります。


12
他のスレッドが終了したかどうかを知る方法は?
StartDownload()3つのスレッドを開始するという名前のメソッドを持つオブジェクトがあります。 各スレッドの実行が終了したときに通知を受け取るにはどうすればよいですか? スレッドの1つ(またはすべて)が終了しているか、まだ実行中であるかを知る方法はありますか?

3
シリアルキューのdispatch_asyncとdispatch_syncの違いは?
私はこのようなシリアルキューを作成しました: dispatch_queue_t _serialQueue = dispatch_queue_create("com.example.name", DISPATCH_QUEUE_SERIAL); dispatch_asyncこのように呼ばれるの違いは何ですか dispatch_async(_serialQueue, ^{ /* TASK 1 */ }); dispatch_async(_serialQueue, ^{ /* TASK 2 */ }); そしてdispatch_sync、このシリアルキューでこのように呼ばれましたか? dispatch_sync(_serialQueue, ^{ /* TASK 1 */ }); dispatch_sync(_serialQueue, ^{ /* TASK 2 */ }); 私の理解では、使用されるディスパッチ方法に関係なく、のTASK 1前TASK 2に実行および完了されます。

18
BackgroundWorkerがキャンセルするのを待つ方法は?
あなたのために何かをするオブジェクトの架空の方法を考えてみましょう: public class DoesStuff { BackgroundWorker _worker = new BackgroundWorker(); ... public void CancelDoingStuff() { _worker.CancelAsync(); //todo: Figure out a way to wait for BackgroundWorker to be cancelled. } } どのようにBackgroundWorkerが完了するのを待つことができますか? 過去に人々は試みました: while (_worker.IsBusy) { Sleep(100); } しかし、このデッドロック、理由はIsBusy後になるまでクリアされないRunWorkerCompletedイベントが処理され、アプリケーションがアイドル状態になるまでそのイベントが処理取得することはできません。ワーカーが完了するまで、アプリケーションはアイドル状態になりません。(さらに、それは忙しいループです-嫌です)。 他の人はそれを提案するkludgingに追加しました: while (_worker.IsBusy) { Application.DoEvents(); } これに関する問題は、Application.DoEvents()現在キューにあるメッセージが処理され、再入可能性の問題が生じることです(.NETは再入可能ではありません)。 私は、コードがイベントを待つイベント同期オブジェクトを含むいくつかのソリューションを使用したいと思います-ワーカーのRunWorkerCompletedイベントハンドラーが設定します。何かのようなもの: Event _workerDoneEvent = new …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.