【发布时间】:2016-08-30 20:56:05
【问题描述】:
我的理解是,在 ClassName.class 上同步说 Penguin.class 可能并不总是正确的方式(我的意思是使用 Penguin.class 作为普通的内在锁,除非有意影响 Penguin.class 的静态访问)和相反,首选的同步方式是在 penguin(Penguin.class 的一个实例)上。
如果我使用前一种方法,我会看到一段时间内阻塞了 Penguin 的所有静态方法(所以除非是故意的,否则应该避免这种方法)。
前一种方法是否还会阻止对静态字段的读写(认为不会)?
我还缺少其他副作用吗?性能等??
【问题讨论】:
-
在
Class实例上同步会阻止所有其他在同一类实例上同步的代码。仅此而已,与在任何其他实例上同步没有什么不同。 -
你的思维水平太低了。多线程代码很难编写,即使对于聪明人来说也是如此。您最好使用新的并发包并考虑不可变数据。更实用的方法将更安全,更容易正确。让线程改变可变静态字段是自找麻烦。我会重新考虑。
-
@duffymo - 我无法决定这个应用程序的语言,它已经完成了,但永远不会被弄脏。某些或其他的东西永远不会破裂。 FP没做过多,但是一般情况下是否支持多线程,scala是否支持。
-
你有Java标签;我假设你想要Java。 FP 是否支持多线程?嗯,通常。不需要。 Scala 是一种混合功能/面向对象的语言。自从 JDK 8 添加了 lambdas 以来,Java 本身具有更多的功能特性。
-
Penguin.class 与 Class.class 不同。
标签: java multithreading performance synchronization static-methods