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

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

2
CompletableFuture、Future、RxJavaのObservableの違い
私はとの違いを知りたいのですが CompletableFuture、FutureとObservable RxJava。 私が知っていることはすべて非同期ですが Future.get() スレッドをブロックします CompletableFuture コールバックメソッドを提供します RxJava Observable--- CompletableFuture他の利点と同様(不明) たとえば、クライアントが複数のサービス呼び出しを行う必要があり、Futures(Java)を使用する場合、Future.get()順次実行されます... RxJavaでそれがどのように優れているかを知りたいです。 そして、ドキュメントhttp://reactivex.io/intro.htmlは言う Futuresを使用して条件付き非同期実行フローを最適に構成することは困難です(または各リクエストのレイテンシは実行時に変化するため不可能です)。もちろん、これは可能ですが、すぐに複雑になり(エラーが発生しやすくなる)、Future.get()で途中でブロックされ、非同期実行の利点がなくなります。 RxJavaこの問題をどのように解決するかを知りたいと本当に思っています。ドキュメントから理解するのは難しいと思いました。

30
Javaで最も頻繁に発生する並行性の問題は何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 これは、Javaにおける一般的な同時実行性の問題に関する一種の投票です。例としては、古典的なデッドロックや競合状態、あるいはSwingのEDTスレッド化バグが考えられます。考えられる問題の範囲だけでなく、最も一般的な問題にも興味があります。したがって、Javaの同時実行性バグの特定の回答をコメントごとに1つ残し、遭遇したものを見つけたら投票してください。

11
オブジェクトまたはメソッドのJava同期メソッドロック?
同じクラスに2つの同期されたメソッドがあり、それぞれが異なる変数にアクセスしている場合、2つのスレッドがそれらの2つのメソッドに同時にアクセスできますか?ロックはオブジェクトで発生しますか、それとも同期メソッド内の変数と同じくらい具体的になりますか? 例: class X { private int a; private int b; public synchronized void addA(){ a++; } public synchronized void addB(){ b++; } } 2つのスレッドが実行クラスXの同じインスタンスにアクセスすることができますx.addA()とx.addB()同じ時間に?

7
Task.Run()とTask.Factory.StartNew()の違いは何ですか
私には方法があります: private static void Method() { Console.WriteLine("Method() started"); for (var i = 0; i < 20; i++) { Console.WriteLine("Method() Counter = " + i); Thread.Sleep(500); } Console.WriteLine("Method() finished"); } そして、このメソッドを新しいタスクで開始したいと思います。このような新しいタスクを開始できます var task = Task.Factory.StartNew(new Action(Method)); またはこれ var task = Task.Run(new Action(Method)); しかし、間に何らかの違いがあるTask.Run()とはTask.Factory.StartNew()。どちらもThreadPoolを使用しており、タスクのインスタンスを作成した直後にMethod()を開始します。最初のバリアントをいつ使用し、いつ2番目に使用するか?


12
CountDownLatchはJavaマルチスレッドでどのように使用されますか?
誰かが私にJava CountDownLatchとは何か、いつそれを使用するかを理解するのを手伝ってくれる? このプログラムがどのように機能するのか、私にはよくわかりません。私が理解しているように、3つのスレッドすべてが一度に開始し、各スレッドは3000ms後にCountDownLatchを呼び出します。したがって、カウントダウンは1つずつ減少します。ラッチがゼロになった後、プログラムは「完了」と出力します。多分私が理解した方法は間違っています。 import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; class Processor implements Runnable { private CountDownLatch latch; public Processor(CountDownLatch latch) { this.latch = latch; } public void run() { System.out.println("Started."); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } latch.countDown(); } } // ------------------------------------------------ ----- public class App { …

7
再帰的ロック(Mutex)と非再帰的ロック(Mutex)
POSIXでは、ミューテックスを再帰的にすることができます。つまり、同じスレッドが同じミューテックスを2回ロックしても、デッドロックは発生しません。もちろん、2回アンロックする必要もあります。そうしないと、他のスレッドがミューテックスを取得できません。pthreadをサポートするすべてのシステムが再帰的ミューテックスもサポートするわけではありませんが、POSIX準拠にしたい場合は、そうする必要があります。 他のAPI(より高レベルのAPI)も、通常はロックと呼ばれるミューテックスを提供します。一部のシステム/言語(Cocoa Objective-Cなど)では、再帰的mutexと非再帰的mutexの両方を提供しています。一部の言語では、どちらか一方しか提供されません。たとえば、Javaミューテックスは常に再帰的です(同じオブジェクトで同じスレッドが2回「同期」する場合があります)。それらが提供する他のスレッド機能によっては、再帰的ミューテックスは自分で簡単に記述できるため、再帰ミューテックスがなくても問題ない場合があります(私は、より単純なミューテックス/条件操作に基づいて、自分で再帰的ミューテックスをすでに実装しています)。 私が本当に理解していないこと:非再帰的mutexは何に適していますか?同じミューテックスを2回ロックする場合、なぜスレッドデッドロックが必要なのですか?それを回避できる高水準言語(たとえば、デッドロックが発生するかどうかをテストし、発生する場合は例外をスローする)でも、通常はそうしません。代わりにスレッドをデッドロックさせます。 これは、誤って2回ロックして1回だけロック解除した場合にのみ発生します。再帰的なmutexの場合、問題を見つけるのは難しくなります。そのため、すぐにデッドロックして、間違ったロックがどこにあるかを確認できますか?しかし、ロックを解除するときにロックカウンターを返すのと同じことはできませんでした。最後のロックを解放し、カウンターがゼロではない場合、例外をスローしたり、問題をログに記録したりできます。または、私が確認できない他のより有用な非再帰的ミューテックスのユースケースはありますか?それとも、非再帰的なミューテックスは再帰的なミューテックスよりもわずかに高速になる可能性があるため、それは単にパフォーマンスかもしれませんか?しかし、私はこれをテストしましたが、違いは実際にはそれほど大きくありません。

10
同期とロック
java.util.concurrentAPIはと呼ばれるクラスを提供しますLock。これは基本的に、重要なリソースにアクセスするためにコントロールをシリアル化します。park()およびなどのメソッドを提供しunpark()ます。 synchronizedキーワードとusing wait()およびmethodを使用できれば、同様のことができますnotify() notifyAll()。 これらのうちどれが実際に優れているのか、なぜですか?

5
このforeachコードをParallel.ForEachに変換するにはどうすればよいですか?
私は少し混乱していParallel.ForEachます。 それは何でParallel.ForEachあり、それは正確に何をしますか? MSDNリンクを参照しないでください。 簡単な例を次に示します。 string[] lines = File.ReadAllLines(txtProxyListPath.Text); List<string> list_lines = new List<string>(lines); foreach (string line in list_lines) { //My Stuff } この例をどのように書き換えることができParallel.ForEachますか?

6
スレッドの作成に費用がかかると言われているのはなぜですか?
Javaチュートリアルによると、スレッドの作成にはコストがかかります。しかし、なぜそれが正確に高いのですか?Javaスレッドが作成され、その作成に費用がかかると、正確にはどうなりますか?私はこのステートメントを真実と見なしていますが、JVMでのスレッド作成のメカニズムに興味があります。 スレッドのライフサイクルのオーバーヘッド。スレッドの作成と分解は無料ではありません。実際のオーバーヘッドはプラットフォームによって異なりますが、スレッドの作成には時間がかかり、リクエスト処理にレイテンシが発生し、JVMとOSによる処理アクティビティが必要になります。ほとんどのサーバーアプリケーションのように、リクエストが頻繁で軽量である場合、リクエストごとに新しいスレッドを作成すると、大量のコンピューティングリソースを消費する可能性があります。 ブライアン・ゲッツ、ティム・パイエルス、ジョシュア・ブロック、ジョセフ・ボウビア、デビッド・ホームズ、ダグ・リーによるJavaの並行処理から 印刷ISBN-10:0-321-34960-1

9
InvokeRequiredコードパターンの自動化
イベント駆動型GUIコードで次のコードパターンを記述する必要がある頻度を痛感しました。 private void DoGUISwitch() { // cruisin for a bruisin' through exception city object1.Visible = true; object2.Visible = false; } になる: private void DoGUISwitch() { if (object1.InvokeRequired) { object1.Invoke(new MethodInvoker(() => { DoGUISwitch(); })); } else { object1.Visible = true; object2.Visible = false; } } これは、覚えたり入力したりするための、C#での厄介なパターンです。誰かがこれをある程度自動化する何らかのショートカットや構造を思いついたことがありますか?object1.InvokeIfNecessary.visible = trueタイプショートカットのように、この追加のすべての作業を行わずに、このチェックを行う関数をオブジェクトにアタッチする方法があったら、すばらしいでしょう。 前の答えはちょうどたびに呼び出しを()を呼び出すの非現実を議論してきた、とさえ[起動()構文が非効率的との両方で、まだ対処しにくいです。 それで、誰かがショートカットを見つけましたか?

8
同期された静的メソッドはJavaでどのように機能し、それをHibernateエンティティのロードに使用できますか?
基本的なデータアクセスを実行するためにHibernate関数を呼び出す静的メソッドを持つutilクラスがある場合。メソッドの作成がsynchronizedスレッドの安全性を確保するための適切なアプローチであるかどうか疑問に思っています。 これにより、同じDBインスタンスへの情報へのアクセスを防ぐことができます。ただし、次のコードがgetObjectById特定のクラスから呼び出されたときに、すべてのクラスに対して呼び出されるのを妨げているかどうかは確信しています。 public class Utils { public static synchronized Object getObjectById (Class objclass, Long id) { // call hibernate class Session session = new Configuration().configure().buildSessionFactory().openSession(); Object obj = session.load(objclass, id); session.close(); return obj; } // other static methods }

10
スレッドが.NETで完了するのを待つ方法は?
メインのUIスレッドだけでなく、2つのスレッドが必要なC#では、これまでスレッドを使用したことがありません。基本的に、私は以下を持っています。 public void StartTheActions() { //Starting thread 1.... Thread t1 = new Thread(new ThreadStart(action1)); t1.Start(); // Now, I want for the main thread (which is calling `StartTheActions` method) // to wait for `t1` to finish. I've created an event in `action1` for this. // The I wish `t2` to start... …
178 c#  multithreading 

8
PythonでスレッドIDを見つける方法
マルチスレッドのPythonプログラムとwriteLog(message)、タイムスタンプとそれに続くメッセージを出力するユーティリティ関数があります。残念ながら、結果のログファイルでは、どのスレッドがどのメッセージを生成しているかはわかりません。 writeLog()メッセージに何かを追加して、どのスレッドがそれを呼び出しているかを識別できるようにしたいと思います。明らかに、スレッドにこの情報を渡すだけでもかまいませんが、それははるかに多くの作業になります。os.getpid()使用できるスレッドと同等のスレッドはありますか?


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