1

ここで質問して申し訳ありませんが、私の講師は過去の試験問題の解答を教えてくれません。複数のスレッドでoneTimeOnly()メソッドを実行するにはどうすればよいですか? スレッドセーフ/1つのスレッドで1回だけ実行するには、どのような手順を実行する必要がありますか?

public class ExampleClass {
    private volatile boolean flag = false;
    public void someOperation() {
        if(flag != true) {
            oneTimeOnly();
        }
        flag = true;
    }
}
4

3 に答える 3

6

文字通りの意味で、メソッドが呼び出された回数だけ実行されることを妨げるものは何もありません。より高いレベルで理解された場合にのみ、メソッドのメイン ロジックを 1 回だけ実行することが保証されます。私がこれを言っているのは、何人かの教師/インタビュアーが、学生/インタビュイーと無意味なマインドゲームをするのが好きだからです.

あなたのアプローチの問題は、2 つのスレッドがメソッドを同時に実行し、両方が完了した後にのみ設定flagされる可能性があることです。true

メソッドを同期するか、AtomicBoolean1 つのスレッドのみが true に設定されるようにする を使用できます。ただし、これはクラスの課題には高度すぎると思うので、syncronized方法に固執してください。

于 2013-06-03T10:32:19.350 に答える
1

メソッドを同期させるか、同期ブロックを次のように使用します

public void 同期 oneTimeOnly(){}

于 2013-06-03T10:30:19.720 に答える