`
TopLongMan
  • 浏览: 9191 次
  • 性别: Icon_minigender_1
  • 来自: 南阳市
社区版块
存档分类
最新评论

多线程(synchronized)的问题

阅读更多
1.在静态方法上使用同步时会发生什么事?
同步静态方法时会获取该类的“Class”对象,所以当一个线程进入同步的静态方法中时,线程监视器获取类本身的对象锁,其它线程不能进入这个类的任何静态同步方法。它不像实例方法,因为多个线程可以同时访问不同实例同步实例方法。
2.静态同步方法与非静态同步方法会相互影响吗?
静态方法的锁对象是该类的“Class”对象,非静态方法的锁对象是该类的某个实例对象,所以,两者之间是不存在竞态关系(即不会相互影响)。也即当一个类的一个静态同步方法被调用时,它的非静态同步方法可以同时被调用,而不会受其影响。
3.当一个同步方法已经执行,线程能够调用对象上的非同步实例方法吗?
可以,一个非同步方法总是可以被调用而不会有任何问题。实际上,Java 没有为非同步方法做任何检查,锁对象仅仅在同步方法或者同步代码块中检查。如果一个方法没有声明为同步,即使你在使用共享数据 Java 照样会调用,而不会做检查是否安全,所以在这种情况下要特别小心。一个方法是否声明为同步取决于临界区访问(critial section access),如果方法不访问临界区(共享资源或者数据结构)就没必要声明为同步的。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics