【发布时间】:2017-01-20 07:10:03
【问题描述】:
我正在研究多线程概念。
public class Foo{
public void testMethod1(){
synchronized(foo.class){
// only one thread can access this block at a time
}
}
// or i can use the below method
public void testMethod2(){
synchronized(SomeClass.class){
// only one thread can access this block at a time
}
}
}
我将在我的代码中使用 testMethod1 或 testMethod2。
如您所见,我在testMethod1() 的Foo.class 上使用synchronized,
和testMethod2()中的SomeClass.class。
如果我使用的任何方法在多线程访问中给出相同的结果。 我想知道用法之间的区别,当我必须对同步块使用相同的类而对同步块使用其他类时。
或者上面两种方法有什么区别?
【问题讨论】:
-
它们之间没有任何区别。
-
是的,有区别。它们不在同一个对象上同步,因此它们不是互斥的,这意味着一个线程可以执行
synchronized(foo.class)块内的代码,而另一个线程可以同时执行synchronized(SomeClass.class)类内的代码, b>. -
我的发现。任何 AnyClass.class 或 AnyClass.getClass() 都将返回一个唯一/singleTon 的类对象。因此 synchronized(AnyClass.class) 将锁定该引用,因此只有一个线程可以访问该块。我们也可以使用 private static final Object lock = new Object();做一把锁。所以我们可以在同步块中使用 AnyClass.class。
标签: java multithreading