静态初始化器应该在第一次引用类之前执行一次。这意味着每次访问某个类时,都应该执行检查,以确定是否执行了该类的静态初始化程序。
看来,在多线程环境中,具有非平凡静态初始值设定项的类可能成为争用的来源,因为当多个线程访问该类时需要进行同步。
我的问题是最大限度地减少这种隐式锁对由静态初始化器引入的类定义的影响的最佳方法是什么?静态初始化器和线程同步(.NET)
1
A
回答
1
静态构造的执行由第一以下事件到应用程序域内发生触发:
- 创建类的实例。
- 任何类的静态成员被引用
它应该是类加载器的责任,需要静态构造函数时处理并发问题。
1
我不认为有太多的争议。初始化器在类加载时运行。如果该类已经加载,则不需要进行检查。
0
规范说“在第一次使用该类的静态字段之前,在执行相关时间执行”。因此,人们可以假设(或者希望如果你是悲观的)实现已经发现他们需要关心线程同步。
0
我相信这是作为JIT编译的一部分。一旦静态初始化器已经被分解并运行,它就不再需要运行它,因此没有多线程的同步问题。当然,JIT引擎将是线程安全的。
Nick。
相关问题
- 1. 静态初始化和静态同步方法锁定问题
- 2. 全局静态初始化线程
- 3. 初始化静态块中的线程?
- 4. PHP静态初始化器
- 5. .NET中的静态类初始化
- 6. 静态初始化
- 7. C++静态变量初始化和线程
- 8. C++中的静态初始化和线程安全
- 9. Java中的静态初始化程序和静态方法
- 10. 静态初始器?
- 11. 线程中的静态同步和非静态同步方法行为差异
- 12. 静态初始化数组?
- 13. 静态HashMap的初始化
- 14. 静态初始化INT
- 15. 静态属性初始化
- 16. 静态变量初始化
- 17. 静态初始化C++
- 18. 静态变量初始化
- 19. Spring的静态初始化
- 20. 初始化静态结构
- 21. 静态字段初始化
- 22. 静态对象初始化
- 23. 初始化静态向量
- 24. 静态ImmutableArray未初始化
- 25. 初始化静态变量
- 26. 静态初始化混淆
- 27. 静态变量初始化
- 28. Python中的静态初始化器
- 29. hadoop映射器静态初始化
- 30. 内部类的静态初始化器?
好吧...新产生的线程如何知道该类已被加载?它仍然需要与中心人士进行交流才能找到答案。 – kolosy 2009-06-25 17:51:38
这是虚拟机的责任。如果虚拟机没有任何聪明的技巧/为了实现这一点而锁定,我不想开发一个单一的.NET应用程序。 – nos 2009-06-25 18:00:19