静的クラスがある場合、jvmは一度初期化されることをどのように保証しますか? 2つのスレッドが同時にこの最初のアクセスを試みるとどうなりますか?この機能言語は不変であるか? EDIT:静的変数を持つクラスです。スタティックはマルチスレッド環境でどのように機能しますか?
答えて
JVMは、ANYクラスが正確に1回初期化されることを保証します。
正確な低レベルのメカニズムがこれを行うために使用するのは本当にJVM特有ですが、プログラマーとして知る必要があるのは、スレッドセーフなので、同じクラスへのアクセス/初期化を試みることです異なるスレッド。 (もちろん、それはちょうど、クラスローディングのために行く:すべての不変のデータにアクセスするという点で、それは静的または特定のインスタンスで、あなたが適切な対策を取る必要があること。)
スタティックネストされたクラスを持つことができ、他のクラスと同じように動作します。
私はあなたの静的コード/ブロック、クラスの初期化を参照していると仮定します。 JVMは、クラスが1つのスレッドだけによってロードされることを保証します。 JVMに組み込まれて以来、私はそれを使用しない言語はないと思います。
まずオフ、staticキーワードは、その一般的に、それは使用することができるが、クラスの宣言に使用されるが、それは、変数やメソッドの場合とは異なる何かを意味していません。
静的クラスについて本当に知りたいですか?それとも静的変数/メソッドについての質問ですか?
静的何が最初のスレッドがアクセスしようとしていないとき、クラスがロードされるときに初期化されます。ただし、クラスのstatic
は、データメンバーまたは関数/メソッドのstatic
と同じではありません。詳細については、this articleを参照してください。データメンバについて静的である場合、それらは "オブジェクト変数"ではなく "クラス変数"または "クラスメソッド"とみなされます(this article from Oracle for that discussion参照)。それは、インスタンスではなくクラスオブジェクト自体の一部にすることで実現します。任意のクラスには1つのクラスオブジェクトしか存在しません。他の言語についてのご質問に関して
:いいえ、静的言語に応じて、多くの異なるものを意味することができます。
- 1. CtrlEventsのハンドラはマルチスレッド環境でどのように機能しますか?
- 2. HttpContext.Currentはマルチスレッド環境でどのように動作しますか?
- 3. アプリエンジンの柔軟な環境はどのように機能しますか?
- 4. 未知の環境でQラーニングがどのように機能しますか?
- 5. パス環境変数はどのように機能しますか?
- 6. ステージング環境でコードホスティングがどのように機能するのですか
- 7. マルチスレッド環境のデストラクタ?
- 8. マルチスレッド環境のShiro
- 9. マルチスレッド環境でのHibernate.getCurrentSession()
- 10. マルチスレッド環境でのrocksdb
- 11. マルチスレッド環境でのLinq2SQLロックオブジェクト?
- 12. ビルドツールはデプロイメント環境でどのように機能しますか?特に依存関係
- 13. perl:Log Log4perlはマルチスレッド環境で動作しますか?
- 14. 何場合のgetInstanceはnullを返しますし、どのようにマルチスレッド環境で
- 15. マルチスレッド、マルチプロセスまたはマルチコア環境でARM NEONはスレッドセーフですか?
- 16. 実行時環境はどのくらい正確に機能しますか?
- 17. iPhone OSでのマルチスレッドはどのように機能しますか?どうやって使うの?
- 18. マルチスレッド環境でSendOrPostCallbackとActionの違いはありますか?
- 19. 機能は機能しますが(boot.stepAIC)、別の機能 - 環境問題の中でエラーを投げますか?
- 20. RubyマルチスレッドSQL(テスト環境)
- 21. マルチスレッドHTTPClient環境で基本認証を使用するにはどうすればよいですか?
- 22. R - 変更機能環境
- 23. CMDBuild環境をどのように配備できますか?
- 24. マルチスレッド環境でのCOMの処理
- 25. マルチスレッド環境でのリストのラウンドロビン
- 26. マルチスレッド環境でのStringBuilderの使用
- 27. マルチスレッド環境でのCListの使用
- 28. マルチスレッド環境(embedded Linux)のembedded_linuxでのsleep_until
- 29. マルチスレッド環境でのACIDの問題
- 30. スタティックctorが(マルチスレッド環境で)実行を完了する前にクラスのインスタンス(通常のctor)が作成される可能性はありますか?
あなたがスレッドを使用せずにクラスをロードすることはできますか? –
私はあなたの質問を完全に理解しているかどうかはわかりません。通常、クラスローディングはJVMによって処理されますが、 'Class.forName()'メソッドを使用して明示的にクラスをロードすることはできます。常にスレッドによってはロードが必要ですが、クラスをロードするために 'new Thread()'オブジェクトを明示的に宣言する必要はありません。 –