なぜsleep()
とyield()
の方法はstatic
の方法としてjava.lang.Thread
class
で定義されていますか?Java:なぜThread.sleep()とyield()が静的なのですか?
答えて
someXThread
が実行されているときにのみコードが実行されます。この場合、someYThread
には意味がありません。 yield
を呼び出す価値のあるスレッドは現在のスレッドなので、static
というメソッドを作成して、some other threadにyield
を呼び出そうと時間を浪費することはありません。
yield
またはsleep
メソッドを呼び出すと、特定のスレッドではなく現在実行中のスレッドに適用されます。プロセッサを解放するために現在実行中のスレッドを指定する必要はありません。
あなたはこれらのメソッドを呼び出しているときはいつでも、それらが実行されているのと同じスレッド上で適用されているためです。 sleep()
またはwait
のような操作を別のスレッドに実行させることはできません。すべての操作は、現在実行中のスレッドで実行されます。
待機は静的メソッドではないと考えています。現在のスレッドの内部ではsleepとstaticの間にスレッドが使用されます。 –
'wait'は静的ではありません。waitメソッドを呼び出すと、他のスレッドから' notify'が呼び出されるまで現在のスレッドが停止します。あなたは2つのスレッド間の通信に関して正しいです –
しかし、現在のスレッドのロックをとった場合にのみ、現在のスレッドで 'wait'を呼び出すことができます。 「待機」と「睡眠」は全く異なる。 – selig
同じ理由から、stop()およびsuspend()メソッドは推奨されなくなりました。外部からのスレッドの状態での侵入は危険で、予期しない結果を引き起こす可能性があります。そして、睡眠が静的でない場合、例えば、それからの中断はどうなると思いますか?
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");
}
}
彼らは静的であり、つまり、sleepクラスとyieldクラスの完全な機能を持つ親クラス(ここではスレッドクラス)メソッドが実行されます。あなたが速かった
- 1. System.Randomクラスが静的でないのはなぜですか?
- 2. このコレクションイニシャライザが静的になるのはなぜですか?
- 3. なぜ静的デストラクタがないのですか?
- 4. なぜ静的フィールドがシリアル化されないのですか
- 5. CustomFieldSerializerに静的メソッドが必要なのはなぜですか?
- 6. この静的Javaメソッドはスレッドセーフではないのはなぜですか?
- 7. モデルビュープレゼンター:なぜモデルは静的ですか?
- 8. 静的バインディングがクラスと関数で異なるのはなぜですか?
- 9. yieldがイテレータを返すのはなぜですか?
- 10. なぜ「静的でない変数から静的なコンテキストから参照できないのですか?」
- 11. なぜSystem.Arrayのほとんどのメソッドは静的ですか?
- 12. なぜ静的なコンポーネントをチェックインするのですか?
- 13. Java Thread.sleepまたはDate.after()は、他のコンピュータで機能が異なるのはなぜですか?
- 14. Javaで静的初期化ブロックを使用するのはなぜですか?
- 15. なぜJavaで静的クラスのインスタンスを作成したいのですか?
- 16. 静的クラスに非静的メソッドと変数を使用できないのはなぜですか?
- 17. なぜ機能に「静的」な定義がありますか?
- 18. 静的イニシャライザで宣言の順序が重要なのはなぜですか?
- 19. Java - 静的でないフィールドリストへの静的参照
- 20. Java静的変数がnullになる
- 21. Javaでクラスが静的であると宣言されているのはなぜですか?
- 22. なぜ静的クラスは静的メンバーのみを持つことができますか?
- 23. 静的ビルドで共有ライブラリが必要なのはなぜですか?
- 24. なぜタイプパラメータで静的メソッドを呼び出すことが可能ですか?
- 25. 静的ブロックと静的でない原始的なデータフィールド
- 26. 数学関数用の静的ライブラリがないのはなぜですか?
- 27. なぜデリゲートは静的でなければならないのですか?
- 28. Java Trident LibraryとThread.sleep()
- 29. 静的メソッドと静的変数のjava
- 30. なぜ列挙コンストラクタは、静的フィールドにアクセスすることができない
...;) – Maroun
他のスレッドが必ずしも得られたされていません - 複数のプロセッサ(コア)が存在する場合、それらはアクティブにすることができます。真の理由は、yieldとsleepを他のスレッドに適用すると、他のスレッドのプライバシーを侵害する、予測不可能で危険なことです。 –
なぜそのメソッドが静的であるかについての質問です。他のスレッドにアクセスすることについてではありません。ここまでのところ良い点: –