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

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


9
SimpleDateFormatへのアクセスの同期
SimpleDateFormatのjavadocには、SimpleDateFormatが同期されていないことが記載されています。 「日付形式は同期されません。スレッドごとに個別の形式インスタンスを作成することをお勧めします。複数のスレッドが同時に形式にアクセスする場合は、外部で同期する必要があります。」 しかし、マルチスレッド環境でSimpleDateFormatのインスタンスを使用するための最良のアプローチは何ですか。これは私が考えたいくつかのオプションです。過去にオプション1と2を使用しましたが、より良い代替策があるかどうか、またはこれらのオプションのどれが最高のパフォーマンスと同時実行性を提供するかを知りたいと思います。 オプション1:必要に応じてローカルインスタンスを作成する public String formatDate(Date d) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(d); } オプション2:SimpleDateFormatのインスタンスをクラス変数として作成しますが、インスタンスへのアクセスを同期します。 private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); public String formatDate(Date d) { synchronized(sdf) { return sdf.format(d); } } オプション3:スレッドごとにSimpleDateFormatの異なるインスタンスを格納するThreadLocalを作成します。 private ThreadLocal<SimpleDateFormat> tl = new ThreadLocal<SimpleDateFormat>(); public String formatDate(Date d) { SimpleDateFormat sdf = …

16
i ++はスレッドセーフではないと聞きましたが、++ iはスレッドセーフですか?
アセンブリでは元の値を一時としてどこかに保存し、それをインクリメントしてから置き換えるので、コンテキストスイッチによって中断される可能性があるため、i ++はスレッドセーフなステートメントではないと聞きました。 しかし、++ iについて疑問に思っています。私の知る限り、これは 'add r1、r1、1'などの単一のアセンブリ命令に削減されます。これは1つの命令のみであるため、コンテキストスイッチによって中断されません。 誰かが明確にできますか?x86プラットフォームが使用されていると想定しています。
90 c++  c  multithreading 

8
ArrayListをスレッドセーフにするにはどうすればよいですか?Javaの問題に対する別のアプローチ?
実行が終了したらすぐにThreadクラスを拡張するRaceCarオブジェクトを保持するために使用するArrayListがあります。Raceと呼ばれるクラスは、RaceCarオブジェクトが実行の終了時に呼び出すコールバックメソッドを使用して、このArrayListを処理します。コールバックメソッドaddFinisher(RaceCar finisher)は、RaceCarオブジェクトをArrayListに追加します。これは、スレッドが実行を終了する順序を与えることになっています。 ArrayListは同期されていないため、スレッドセーフではありません。新しいArrayListを渡し、返されたコレクションをArrayListに割り当てることで、Collections.synchronizedCollection(c Collection)メソッドを使用してみました。ただし、これによりコンパイラエラーが発生します。 Race.java:41: incompatible types found : java.util.Collection required: java.util.ArrayList finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars)); 関連するコードは次のとおりです。 public class Race implements RaceListener { private Thread[] racers; private ArrayList finishingOrder; //Make an ArrayList to hold RaceCar objects to determine winners finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars)); //Fill array with RaceCar objects for(int i=0; …


6
condition_variable.notify_one()を呼び出す前にロックを取得する必要がありますか?
の使用について少し混乱していますstd::condition_variable。を呼び出す前unique_lockに、を作成する必要があることを理解しています。私は何を見つけることができない、私はまた、呼び出す前に独自のロックを取得する必要があるかどうかですか。mutexcondition_variable.wait()notify_one()notify_all() cppreference.comの例は矛盾しています。たとえば、notify_oneページは次の例を示しています。 #include <iostream> #include <condition_variable> #include <thread> #include <chrono> std::condition_variable cv; std::mutex cv_m; int i = 0; bool done = false; void waits() { std::unique_lock<std::mutex> lk(cv_m); std::cout << "Waiting... \n"; cv.wait(lk, []{return i == 1;}); std::cout << "...finished waiting. i == 1\n"; done = true; } void signals() { …

5
java.lang.Thread.Stateを理解する:WAITING(パーキング)
最初に、本当にばかげた質問です、私はただ待っている「駐車」が何を意味するのか疑問に思っていましたか?スレッドはパークされるのを待っていますか、それともパークされたばかりなので待機状態ですか?そして、そのパーキングが発生すると、どのくらいのCP​​U /メモリリソースが使用されますか?スレッドを駐車する目的は何ですか? 次に、JavaスレッドAPIのparkメソッドを確認します。 許可が利用可能でない限り、スレッドスケジューリングの目的で現在のスレッドを無効にします。 許可証が利用可能な場合、それは消費され、通話はすぐに戻ります。それ以外の場合、現在のスレッドはスレッドスケジューリングの目的で無効になり、3つのいずれかが発生するまで休止状態になります。 英語は私の母国語ではないので、私は「許可」を「スレッドを駐車する許可」の一種として意図していたことを理解するのが難しいので、次の質問があります。 その意味は何ですか、「許可」とは何ですか、そして誰がどのようにそれらの許可をチェックしていますか? それはどういう意味ですか:「許可が利用可能である場合、それは消費されます」、それは「駐車」されていますか? 続いて、2番目のポイントが真の場合、「駐車」と「休眠」の違いは何ですか?許可があれば永久に駐車でき、許可がなければ「休眠」にすることができますか? ありがとう

7
サービスからUIスレッドハンドラーにアクセスする
私は、UIスレッドのハンドラーにアクセスする必要があるAndroidで新しいことを試しています。 私は次のことを知っています: UIスレッドには独自のハンドラーとルーパーがあります メッセージはすべてUIスレッドのメッセージキューに入れられます ルーパーはイベントを取得してハンドラーに渡しました ハンドラーがメッセージを処理し、特定のイベントをUIに送信します UIスレッドハンドラーを取得し、このハンドラーにメッセージを送信する必要があるサービスが必要です。このメッセージが処理され、UIに発行されるようにします。ここでサービスは、いくつかのアプリケーションによって開始される通常のサービスになります。 これが可能かどうか知りたいのですが。もしそうなら、私がそれを試すことができるように、いくつかのコードスニペットを提案してください。 よろしくお願いします

1
ループは、printステートメントのない他のスレッドによって変更された値を認識しません
私のコードには、別のスレッドから状態が変更されるのを待つループがあります。他のスレッドは機能しますが、私のループは変更された値を認識しません。永遠に待ちます。しかし、System.out.printlnステートメントをループに入れると、突然動作します!どうして? 以下は私のコードの例です: class MyHouse { boolean pizzaArrived = false; void eatPizza() { while (pizzaArrived == false) { //System.out.println("waiting"); } System.out.println("That was delicious!"); } void deliverPizza() { pizzaArrived = true; } } whileループの実行中にdeliverPizza()、別のスレッドから呼び出してpizzaArrived変数を設定します。しかし、ループは、System.out.println("waiting");ステートメントのコメントを外したときにのみ機能します。どうしたの?

11
同じスレッドでstartメソッドを2回呼び出すことは合法ですか?
次のコードは、プログラムで2回目にメソッドjava.lang.IllegalThreadStateException: Thread already startedを呼び出したときに表示されます。start() updateUI.join(); if (!updateUI.isAlive()) updateUI.start(); これは2回目にupdateUI.start()呼び出されたときに発生します。私はそれを何度も実行しましたが、スレッドが呼び出され、ヒットする前に完全に実行されupdateUI.start()ます。 呼び出しupdateUI.run()はエラーを回避しますが、スレッドをUIスレッド(SOの他の投稿で述べた呼び出しスレッド)で実行させますが、これは私が望むものではありません。 スレッドは一度だけ開始できますか?もしそうなら、もう一度スレッドを実行したい場合はどうすればよいですか?この特定のスレッドは、UIスレッドで実行されるよりもスレッドで実行されず、ユーザーが不当に長い待機をしている場合、バックグラウンドでいくつかの計算を実行しています。


3
WindowsのPHPスレッドセーフおよび非スレッドセーフ
PHP for Windowsをダウンロードしています。ウェブサイトで2つのオプションを取得しました。 PHPスレッドセーフ PHP非スレッドセーフ 次の質問にお答えください。 2つの違いは何ですか?お互いの長所と短所は何ですか? トラフィックの多いeコマースWebサイトを開発していますが、どちらをお勧めしますか。その理由は何ですか。

2
アクターはスレッドと比較してどのように機能しますか?
俳優がどのように良いか短い説明がありますかスレッドと比較してか? スレッドをアクターと見なして他のスレッドにメッセージを送信することはできませんか?多少の違いはありますが、はっきりしていません。スレッドを別の方法で使用して、任意の言語でアクターを使用できますか?

9
モニターとロック
C#でスレッドセーフのためにMonitorクラスまたはlockキーワードのいずれかを使用するのが適切なのはいつですか? 編集: これまでの回答lockから、Monitorクラスへの一連の呼び出しの省略形であるように思われます。ロックコールの略記は正確には何ですか?またはより明確に、 class LockVsMonitor { private readonly object LockObject = new object(); public void DoThreadSafeSomethingWithLock(Action action) { lock (LockObject) { action.Invoke(); } } public void DoThreadSafeSomethingWithMonitor(Action action) { // What goes here ? } } 更新 ご協力いただきありがとうございます。ご提供いただいた情報の一部をフォローアップするために、別の質問を投稿しました。あなたはこの分野に精通しているようですので、私はリンクを投稿しました:ロックされた例外をロックして管理するこのソリューションの何が問題になっていますか?

4
Platform.runLaterとJavaFXのタスク
私はこれについていくつかの研究を行ってきましたが、控えめに言ってもまだ非常に混乱しています。 Taskいつ使用するPlatform.runLater(Runnable);か、いつ使用するかについて具体的な例を教えてもらえますか?違いは正確には何ですか?これらのいずれかをいつ使用するかについての黄金律はありますか? また、私が間違っている場合は訂正してください。ただし、これら2つの「オブジェクト」は、GUIのメインスレッド内に別のスレッドを作成する方法ではありませんか(GUIの更新に使用されます)。

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