Cod*_*ber 1 java synchronization
我有一个这样的课:
public class Utils {
public static void doSomething() {
// doSomething code
}
public static void doSomethingElse() {
// doSomethingElse code
}
}
Run Code Online (Sandbox Code Playgroud)
我希望两个方法同步但不能彼此同步,即没有两个线程可以同时处理doSomething()方法,没有两个线程可以同时处理doSomethingElse()但是线程可以处理doSomething()方法和另一个方法同时处理doSomethingElse()方法.
我实现了这样的事情:
public class Utils {
private static final String DO_SOMETHING_LOCK = "DO_SOMETHING_LOCK";
private static final String DO_SOMETHING_ELSE_LOCK = "DO_SOMETHING_ELSE_LOCK";
public static void doSomething() {
synchronized(DO_SOMETHING_LOCK) {
// doSomething code
}
}
public static void doSomethingElse() {
synchronized(DO_SOMETHING_ELSE_LOCK) {
// doSomethingElse code
}
}
Run Code Online (Sandbox Code Playgroud)
我看到Scott Stanchfield的回应在这里采用了类似的方法:
但这是最好的方法吗?对我来说似乎有些笨拙,创造了两个对象,只是用于锁定 - 有更好的方法吗?
使用字符串不是一个好主意,因为相同的字符串可能出现在其他地方,它将是同一个对象,你可以获得依赖关系,而不是它们.做就是了
private static final Object DO_SOMETHING_LOCK = new Object();
Run Code Online (Sandbox Code Playgroud)
其余的都没问题.
| 归档时间: |
|
| 查看次数: |
356 次 |
| 最近记录: |