97 java multithreading synchronization locking synchronized
这个java代码是什么意思?它会锁定所有物体MyClass吗?
synchronized(MyClass.class) {
//is all objects of MyClass are thread-safe now ??
}
Run Code Online (Sandbox Code Playgroud)
以上代码与此不同:
synchronized(this) {
//is all objects of MyClass are thread-safe now ??
}
Run Code Online (Sandbox Code Playgroud)
Tho*_*ung 138
该代码段synchronized(X.class)使用类实例作为监视器.由于只有一个类实例(在运行时表示类元数据的对象),因此一个线程可以在此块中.
随着synchronized(this)块由实例把守.对于每个实例,只有一个线程可以进入该块.
synchronized(X.class)用于确保块中只有一个Thread.synchronized(this)确保每个实例只有一个线程.如果这使得块中线程安全的实际代码取决于实现.如果mutate只有实例的状态synchronized(this)就足够了.
Jor*_*orn 79
要添加到其他答案:
static void myMethod() {
synchronized(MyClass.class) {
//code
}
}
Run Code Online (Sandbox Code Playgroud)
相当于
static synchronized void myMethod() {
//code
}
Run Code Online (Sandbox Code Playgroud)
和
void myMethod() {
synchronized(this) {
//code
}
}
Run Code Online (Sandbox Code Playgroud)
相当于
synchronized void myMethod() {
//code
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*d M 21
不,第一个会锁定类的定义MyClass,而不是它的所有实例.但是,如果在实例中使用,这将有效地阻止所有其他实例,因为它们共享单个类定义.
第二个只会锁定当前实例.
至于这是否使您的对象线程安全,这是一个更复杂的问题 - 我们需要看到您的代码!
| 归档时间: |
|
| 查看次数: |
40857 次 |
| 最近记录: |