假设我们有
class A {
synchronized void m1() {
}
synchronized void m2() {
}
void m3() {
}
static void m6() {
synchronized(this){
}
}
}
和 A 类 a1&a2 的两个实例。
现在如果线程 t1 和实例 a1 调用方法 m1,那么只有实例 a1 的线程 t2 不能执行方法 m1,直到 t1 完成 m1 的执行。具有实例 a2 的 t2 可以执行 m1()。
现在我的疑问是线程 t1 与 a1 可以在执行 m1 时并行执行其他方法(m1 除外)吗?
黑白同步块和同步方法有什么区别?只是块的同步范围较小,所以它是有效的吗?
我读了一篇文章,说明“如果作为参数提供给块的表达式计算为 null,则同步块可以抛出 java.lang.NullPointerException”。
我们总是使用“this”作为同步块的参数,所以只有并且总是在静态方法中使用同步块。因为我们不需要对象实例来执行静态方法。
我在哪里误解了它?