【发布时间】:2012-12-13 08:13:16
【问题描述】:
拜托,我对以下场景的同步块和同步方法有疑问:
第 1 部分 --------------:
Class table
{
Synchronized(this)
{
……………………
}
}
这里我们锁定了表类的对象。 --------------------------------------------------……
第二部分:
Class table
{
Customer cust=new Customer();
Synchronized(cust)
{
……………………
}
}
在这里我们锁定了客户的对象。即客户
在第 1 部分中,我们锁定了?- 表类的对象。
我们锁定了表类,因为表类的对象可能会尝试访问同步
同时从不同的地方阻塞。为了防止它我们锁定了表类的对象
在第 1 部分。
现在来到第2部分:? -
在这里,我们锁定了客户类的对象
--------------------------------------------------……
我的疑惑:
为什么我们要锁定一个表类中的对象,而不是part2中的表类?
如果我们在第 2 部分中没有获得对 cust 的锁定,那么我们可以使用表访问同步块 班级 如果我们锁定 cust,那么我们还需要表类的对象来访问同步块。 表类的对象只需要访问同步块。 由于同步,我们阻止了表类的对象访问同步块
同时来自不同的线程。 那为什么要在表类中锁定表类以外的对象呢?客户类的对象是否会尝试同时从
访问同步块 不同的地方?在第 2 部分中,我们锁定了表类以外的对象。 在什么情况下在表类的对象上锁定表类而不是表是
在第 2 部分中锁定客户类对象的好处?除了表类之外,客户类的对象需要锁定什么?
如果我们在part2中没有锁定客户类的对象会发生什么损坏?
拜托,我是 Java 线程的新手,一段时间以来我一直在努力解决这些问题。任何明确的解释都会有很大帮助。谢谢
【问题讨论】:
-
您是否意识到等宽字体难以阅读文本?你介意破坏代码块中的文本吗?
-
我强烈建议您修复格式。此外,Java 同步是一个广泛讨论的话题,因此您应该提及您已经在 StackOverflow 中看到的内容。
-
当我在谷歌搜索“Java 同步做什么”时,第一个命中是这个 SO 问题:stackoverflow.com/questions/1085709/what-does-synchronized-mean
-
您的所有示例都不是有效的 Java 代码 - 很难推断甚至无法编译的内容。
标签: java synchronization