メソッドで2つのスレッドの一時停止を処理する方法

しすし

このような状況では、アプリの実行中にmethodB()が何度も呼び出されます。methodC()が呼び出されると、methodC()が完了するまでmethodB()は一時停止します。methodA()が呼び出されると、methodB()が3回完了するまで一時停止しますが、「コードX」はスキップします。

methodA()の一時停止を行うためにlocker2、lock2、およびthreadLocker2()を追加しようとしましたが、methodB()も一時停止するため機能しませんでした。誰かが私にこれを行う方法についていくつかの提案をすることができますか?

private final Object locker = new Object();
private boolean lock = false;

public void methodA() {
    //Lock until methodB() run three times

    //Do something
}

public void methodB() { //A thread called again and again
    //Do something

    threadLock();

    //Code X
}

public void methodC() {
    lock true;

    //Do something

    lock = false;
    synchronized (locker) { locker.notify(); }
}

private void threadLock() {
    synchronized (locker) {
        while (lock) {
            try {
                locker.wait();
            } catch (InterruptedException e) {}
        }
    }
}
フェルナンド

そのために、アトミックブール(または整数)または揮発性ブールを使用します。

これは、共有のアトミック/揮発性ブール値です。

private AtomicBoolean secondMethodIsDone = new AtomicBoolean(false);

void firstMethod() {
   methodInOtherThread();
   while(!secondMethodIsDone.get()) {
        //thread sleep waiting...
   }
   // do your things when second is done     
}

これは別のスレッドで発生します:

  void methodInOtherThread() {
      // do your stuff
      // whenever is done:
      secondMethodIsDone.set(true);
  }

これでうまくいくはずです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

runメソッドのループを制御せずにスレッドを一時停止する方法

分類Dev

スレッドとメインスレッドによるlistitemの更新時に競合を処理する方法

分類Dev

ObservableのonErrorメソッドで例外を処理する方法は?

分類Dev

iOSSwiftの電話メソッドでcompletionHandlerを処理する方法

分類Dev

Ruby Rails:Railsが2つの異なるgemで同じメソッド名を処理する方法

分類Dev

スレッドの実行を一時停止する方法

分類Dev

シリアル化されたクラスで一時的なメンバーを含むスレッドを処理するための正しい方法

分類Dev

filter()メソッドを使用して配列内の2つの配列を反復処理する方法

分類Dev

Rで未知のメソッド/ジェネリックを処理する方法

分類Dev

Javaで現在のスレッドを20秒間一時停止する方法は?

分類Dev

C#UWPで他のスレッドを続行しながらスレッドを一時停止する方法

分類Dev

CompletableFuture get()メソッドの例外を処理する方法

分類Dev

buildメソッドでテキストウィジェットの空の配列を処理する方法は?

分類Dev

メインUIスレッドを一時停止する方法(Android)

分類Dev

PowerShellで2つのメソッドを同時に実行する方法

分類Dev

メイン スレッドを 2 番目のスレッドで停止する

分類Dev

クラス内のメソッドを反復処理する

分類Dev

スレッドの快適な一時停止/停止メソッドの作成

分類Dev

同一のメソッドで2つのクラスを「ラップ」する方法は?

分類Dev

2つのスレッドを「同期」メソッドに「含める」方法

分類Dev

ASP.NET MVCその1つのメソッドを1つのスレッドだけで同時に実行する方法は?

分類Dev

2つのスレッドが同時に2つの異なるメソッドを実行できますか?

分類Dev

負荷テストのためにJmeterでpostメソッドを処理する方法は?

分類Dev

asyncメソッド内でnullタスクを処理する最良の方法は?

分類Dev

2つのWinForm間のTreeViewのInvokeメソッドはどこで処理する必要がありますか?

分類Dev

PHPのバックグラウンド操作を実行する方法/別のリクエストでメソッドを処理する方法は?

分類Dev

Googleスプレッドシートで、rank()が2つの同じ値を異なる方法で処理するのはなぜですか?

分類Dev

Androidで2つのスレッドを同時に実行する方法

分類Dev

一時停止&STD ::スレッドを再開するための正しい方法

Related 関連記事

  1. 1

    runメソッドのループを制御せずにスレッドを一時停止する方法

  2. 2

    スレッドとメインスレッドによるlistitemの更新時に競合を処理する方法

  3. 3

    ObservableのonErrorメソッドで例外を処理する方法は?

  4. 4

    iOSSwiftの電話メソッドでcompletionHandlerを処理する方法

  5. 5

    Ruby Rails:Railsが2つの異なるgemで同じメソッド名を処理する方法

  6. 6

    スレッドの実行を一時停止する方法

  7. 7

    シリアル化されたクラスで一時的なメンバーを含むスレッドを処理するための正しい方法

  8. 8

    filter()メソッドを使用して配列内の2つの配列を反復処理する方法

  9. 9

    Rで未知のメソッド/ジェネリックを処理する方法

  10. 10

    Javaで現在のスレッドを20秒間一時停止する方法は?

  11. 11

    C#UWPで他のスレッドを続行しながらスレッドを一時停止する方法

  12. 12

    CompletableFuture get()メソッドの例外を処理する方法

  13. 13

    buildメソッドでテキストウィジェットの空の配列を処理する方法は?

  14. 14

    メインUIスレッドを一時停止する方法(Android)

  15. 15

    PowerShellで2つのメソッドを同時に実行する方法

  16. 16

    メイン スレッドを 2 番目のスレッドで停止する

  17. 17

    クラス内のメソッドを反復処理する

  18. 18

    スレッドの快適な一時停止/停止メソッドの作成

  19. 19

    同一のメソッドで2つのクラスを「ラップ」する方法は?

  20. 20

    2つのスレッドを「同期」メソッドに「含める」方法

  21. 21

    ASP.NET MVCその1つのメソッドを1つのスレッドだけで同時に実行する方法は?

  22. 22

    2つのスレッドが同時に2つの異なるメソッドを実行できますか?

  23. 23

    負荷テストのためにJmeterでpostメソッドを処理する方法は?

  24. 24

    asyncメソッド内でnullタスクを処理する最良の方法は?

  25. 25

    2つのWinForm間のTreeViewのInvokeメソッドはどこで処理する必要がありますか?

  26. 26

    PHPのバックグラウンド操作を実行する方法/別のリクエストでメソッドを処理する方法は?

  27. 27

    Googleスプレッドシートで、rank()が2つの同じ値を異なる方法で処理するのはなぜですか?

  28. 28

    Androidで2つのスレッドを同時に実行する方法

  29. 29

    一時停止&STD ::スレッドを再開するための正しい方法

ホットタグ

アーカイブ