拜托,我对以下场景的同步块和同步方法有疑问:
第1部分 - - - - - - - :
Class table
{
Synchronized(this)
{
……………………
}
}
在这里,我们锁定了表类的对象。--------------------------------------------------……</p>
第2部分:
Class table
{
Customer cust=new Customer();
Synchronized(cust)
{
……………………
}
}
在这里,我们锁定了 customer.ie on cust 在第 1 部分中,我们锁定了?- 表类的对象。我们锁定了表类,因为表类的对象可能会尝试
同时从不同的地方访问同步块。为了防止它,我们在第 1 部分中锁定了表类
的对象。现在来到第 2 部分:?- 这里我们锁定了客户类的对象 ---------------------------------- ----…</p>
我的疑惑:
为什么我们要锁定表类中的对象而不是第 2 部分中的表类?
如果我们在第 2 部分中没有锁定 cust,那么我们可以使用表类访问同步块。如果我们锁定 cust,那么我们还需要表类的对象来访问同步块。表类的对象只需要访问同步块。由于同步,我们阻止了表类的对象
同时从不同的线程访问同步块。那么为什么要在表类中锁定表类以外的对象呢?客户类的对象会尝试从
不同的地方同时访问同步块吗?在第 2 部分中,我们锁定了表类以外的对象。在什么情况下,在表类对象上锁定表类对象是在第 2
部分锁定客户类对象的好处?什么需要锁定客户类的对象,即表类以外的对象?
如果我们没有在part2中锁定客户类的对象,会发生什么损害?
拜托,我是 Java 线程的新手,一段时间以来我一直在努力解决这些问题。任何明确的解释都会有很大帮助。谢谢