关于Java中的同步,我几乎没有疑问。我在网上阅读了很多内容,并为自己提供了很多信息,因此也有很多疑问。
我会列出我的疑问,所以请有人帮助我解决我的疑问。

对象级同步:

1)对于以下代码示例。

public synchronized void a(){
    //todo
    }
}


什么是LOCK?如下面的示例代码所示,它将自动锁定“ this”吗?

public void a(){
    synchronized (this) {
        //TODO
    }
}


2)我们有多种方法代码块锁定在“ this”上。

public void a(){
    synchronized (this) {
        //TODO
    }
}
public synchronized void b(){
    synchronized (this) {
        //TODO
    }
}


那么这是否意味着如果b()的代码块被锁定,那么其他任何线程也将无法同时访问a(),因为它们对对象(this)有锁定?

类级同步:

3)对于以下代码

public static void c(){

synchronized (Main.class) {
        //todo
    }
}public static void d(){
    synchronized (Main.class) {
        //todo
    }
}public static void e(){
    //no syncronization here
}


问题1:如果c()被锁定,那么任何其他线程也可以访问具有同步块的d()吗?
问题2:如果c()处于锁定状态,那么任何其他线程都可以访问非同步方法e()吗?

最佳答案

是的,“这”是锁

该锁位于Main.class上,因此如果c中的锁已被获取,则d不能被另一个线程访问。


在第3点中。e()始终可以被多个线程访问,无论如何,因为它不同步。

希望有帮助:)

10-08 07:06
查看更多