我有一个类,它的函数是这样同步的:
public synchronized void enqueue(int number) {...}
在我的程序中,我有几个线程正在运行,所有线程都希望在类的特定对象上使用此函数。我希望线程简单地尝试使用该函数,如果它被锁定而不等待它,则只需跳过运行该函数。
是否可以不使用 Java.util.concurency 库而仅使用同步原语来完成此操作?
不使用并发的限制不是可选的
最佳答案
我喜欢 AtomicInteger 解决方案,但当然 AtomicInteger 是并发包的一部分。您可以使用以下简单代码遵循相同的原则(但效率较低):
private boolean locked = false;
public void enqueue(int number) {
synchronized (this) {
if (locked) {
return;
}
locked = true;
}
try {
// Synchronized goodness goes here.
} finally {
synchronized (this) {
locked = false;
}
}
}
关于java - Java中的同步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8263209/