
好了,您是否知道静态方法和实例方法之间的一般区别?
唯一的区别
synchronized是,在VM开始运行该方法之前,它必须获取监视器。对于实例方法,获得的锁是与您要在其上调用该方法的对象相关联的锁。对于静态方法,获取的锁与类型本身关联-
因此,其他线程将无法同时调用任何其他同步的静态方法。
换句话说,这是:
class Test{ static synchronized void Foo() { ... } synchronized void Bar() { ... }}是 大致 等效于:
class Test{ static void Foo() { synchronized(Test.class) { ... } } void Bar() { synchronized(this) { ... } }}通常,我倾向于根本不使用同步方法-我更喜欢在私有锁引用上显式同步:
private final Object lock = new Object();...void Bar(){ synchronized(lock) { ... }}您尚未提供足够的信息来确定您的方法应该是静态方法还是实例方法,还是应该完全同步。多线程是一个复杂的问题-我强烈建议您(通过书籍,教程等)阅读它。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)