关于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()始终可以被多个线程访问,无论如何,因为它不同步。
希望有帮助:)