2012-03-17 7 views
1

私は静的メソッドjava.lang.Math.max(int a, int b)がスレッドセーフであるかどうか疑問に思っていますか?java.lang.Math.max(int a、int b)はスレッドセーフですか?

スレッドセーフでない場合は、複数のスレッドに同時にアクセスするために、コードを使用してこのメ​​ソッドの出力が間違っている状況を説明できますか?

+7

あなたは受け入れられた回答なしで30以上の質問があります。答えることができる質問をするための+1。 –

+0

@ PeterLawreyしかし、本当の質問ではないので、-1。 – EJP

答えて

9

あなたが唯一の少なくとも一つのスレッドが状態を変更する共有状態の同時アクセスからスレッド安全性の問題を取得します。

Math.max(a, b)には、スレッドセーフな状態、共有などはありません。

+0

あなたは「州」とまったく同じ意味ですか?あなたは静的な方法を意味しますか?その後、すべての静的メソッドはスレッドセーフになりますか? :-) – siva636

+4

州によって、私はある州から別の州に変わることができるものを意味します。例えばc = 0、それ以降はc = 5です。Javaの場合、変更されるフィールドが必要です。 –

+2

またはデータベースクエリ、またはファイルシステムアクセス。それも国家としてカウントされます。 –

12

Math.maxは完全にステートレスなので、完全にスレッドセーフです。

+0

あなたは「州」とまったく同じ意味ですか?あなたは静的な方法を意味しますか?その後、すべての静的メソッドはスレッドセーフになりますか? :-) – siva636

+1

メソッドは常に同じ出力を同じ入力に返す場合は常に_stateless_です。 –

+1

@ルイス:必ずしも、メソッドはファイルに書き込むことができます(スレッドセーフではありません)。 – danielkza

14

スレッドセーフで、なぜそうではありませんか?状態はなく、呼び出すときにオブジェクトが変更されることはありません。この方法は、ちょうどif文です:

public static int max(int a, int b) { 
    return (a >= b) ? a : b; 
} 
+0

"状態"とはどういう意味ですか?あなたは静的な方法を意味しますか?その後、すべての静的メソッドはスレッドセーフになりますか? :-) – siva636

関連する問題