【发布时间】:2017-12-08 21:12:07
【问题描述】:
我前段时间偶然发现了这个帖子:Does making a reentrant lock static and make it a mutex?,我自己还有一个问题:
如果创建private static final ReentrantLock lock 不被视为代码气味,我感兴趣吗?我读过静态变量是邪恶的,但我目前正在处理的用例看起来像是使用它的理想场所。
有人愿意帮忙吗?
编辑细节:我有这个类,称之为FileProcessor,它在另一个线程中完成给定的工作。我的用例是启动这个类的一些实例并完成这些工作。但我想做的是确保他们中只有一个人会同时完成这项工作,并且他们将轮流执行工作。
所以我想我会给他们一个static ReentrantLock,它将lock() 作为run() 块中的第一件事和unlock() 作为最后一个。这样他们就有了一个共享锁来保护处理同步。
谢谢。
【问题讨论】:
-
在没有任何上下文的情况下说“静态变量是邪恶的”是没有用的。如果没有看到您的用例,很难说这是否是一个好主意。一般来说,
static没有什么邪恶的。你当然可以滥用它,但你可以滥用很多东西。 -
编辑并添加了更多细节
-
使用静态 ReentrantLock 没问题。它似乎很适合您的用例。您也可以使用
synchronized (this) {}来实现相同的目的,而无需使用显式锁定。当然,这并没有提供那么多的粒度。
标签: java multithreading reentrantlock