假设有四种方法(m1,m2,m3,m4)和两个线程(t1,t2),现在我想在下面知道-
1。非静态情况:
a)假设所有方法都已同步但非静态,并说t1正在访问m1,那么t2可以访问m2 / m3 / m4吗?
b)假设 m1和m2是同步的,并且 m3和m4是非同步的,都是非静态的,现在说t1正在访问m1,然后t2可以访问m2 / m3 / m4吗?
2。静态案例:
a)假设所有方法都是同步且静态的,并说t1正在访问m1,那么t2可以访问m2 / m3 / m4吗?
b)假设所有方法都是静态的,并且 m1和m2已同步,并且 m3和m4不同步,现在说t1是访问m1,然后t2可以访问m2 / m3 / m4吗?
3。混合大小写:
a) m1&m2-静态和同步, m3&m4-非静态和非同步。现在说t1正在访问m1,那么t2可以访问m2 / m3 / m4吗?
b) m1-静态和同步, m2-静态和非同步, m3-非静态和同步, m4-非静态和非同步。现在说t1正在访问m1,那么t2可以访问m2 / m3 / m4吗?
有人可以在上面回答并解释吗?谢谢!
答案 0 :(得分:1)
1。
a)号
b)仅m3
和m4
。
2.
a)号
b)仅m3
和m4
。
3.
a)仅m3
和m4
。
b)是的。
答案 1 :(得分:1)
根据JLS:
同步语句代表执行线程获取互斥锁,执行一个块,然后释放该锁。当执行线程拥有该锁时,其他任何线程都无法获取该锁。
对于同步的非静态方法,将在与调用该方法的实例相关联的监视器上获取锁。
对于同步的 static 方法,该锁是在与定义了被调用方法的类的Class
对象关联的监视器上获取的。
请参阅JLS中的Synchronization部分。