2013-06-26 15 views

答えて

33

someXThreadが実行されているときにのみコードが実行されます。この場合、someYThreadには意味がありません。 yieldを呼び出す価値のあるスレッドは現在のスレッドなので、staticというメソッドを作成して、some other threadyieldを呼び出そうと時間を浪費することはありません。

+6

...;) – Maroun

+14

他のスレッドが必ずしも得られたされていません - 複数のプロセッサ(コア)が存在する場合、それらはアクティブにすることができます。真の理由は、yieldとsleepを他のスレッドに適用すると、他のスレッドのプライバシーを侵害する、予測不可能で危険なことです。 –

+3

なぜそのメソッドが静的であるかについての質問です。他のスレッドにアクセスすることについてではありません。ここまでのところ良い点: –

6

yieldまたはsleepメソッドを呼び出すと、特定のスレッドではなく現在実行中のスレッドに適用されます。プロセッサを解放するために現在実行中のスレッドを指定する必要はありません。

similar thread in this forum

14

あなたはこれらのメソッドを呼び出しているときはいつでも、それらが実行されているのと同じスレッド上で適用されているためです。 sleep()またはwaitのような操作を別のスレッドに実行させることはできません。すべての操作は、現在実行中のスレッドで実行されます。

+2

待機は静的メソッドではないと考えています。現在のスレッドの内部ではsleepとstaticの間にスレッドが使用されます。 –

+0

'wait'は静的ではありません。waitメソッドを呼び出すと、他のスレッドから' notify'が呼び出されるまで現在のスレッドが停止します。あなたは2つのスレッド間の通信に関して正しいです –

+0

しかし、現在のスレッドのロックをとった場合にのみ、現在のスレッドで 'wait'を呼び出すことができます。 「待機」と「睡眠」は全く異なる。 – selig

2

同じ理由から、stop()およびsuspend()メソッドは推奨されなくなりました。外部からのスレッドの状態での侵入は危険で、予期しない結果を引き起こす可能性があります。そして、睡眠が静的でない場合、例えば、それからの中断はどうなると思いますか?

0

sleepおよびyieldメソッドはどちらもネイティブです。上記の回答から理解しやすくするために、私はClassAとClassBの2つのクラスを同じ静的メソッドで作成しました。私は他のクラスのメソッドを呼び出してその動作をチェックします。そこで、他のクラスの静的メソッドを呼び出すことができます。
スリープメソッドを静的にする理由の他の理由があるかもしれません。彼らはそれは方法がコンセプトを非表示と静的メソッドの性質による上書きしない実装状況のような子クラスのオブジェクトを保持するために、親クラスの参照で呼び出された場合オーバーライド概念が

すなわち避けることができるように

public class ClassA { 

    public static void method(){ 
     System.out.println("Inside ClassA method"); 
    } 

    public static void main(String[] args) { 
     method(); 
     ClassB classb = new ClassB(); 
     classb.method(); 
    } 
} 

    public class ClassB { 
    public static void method(){ 
     System.out.println("Inside ClassB method"); 
    } 

} 
2

彼らは静的であり、つまり、sleepクラスとyieldクラスの完全な機能を持つ親クラス(ここではスレッドクラス)メソッドが実行されます。あなたが速かった

http://i.stack.imgur.com/goygW.jpg

関連する問題