我对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()的代码块被锁定,那么任何其他线程也不能同时访问()同时锁定对象(这个)?
班级同步:
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()这是一种非同步方法?
答案 0 :(得分:2)
在第3点.e()总是可以被多个线程访问,无论它是什么,因为它没有同步。
希望有所帮助:)