java - Java中的同步函数

标签 java multithreading concurrency synchronization

我有一个类,它的函数是这样同步的:

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/

相关文章:

java - 等待/通知如何在 JVM 级别工作?

c# - 订购 ConcurrentDictionary。为什么这不起作用?

java - Spring MVC : too much attributes in the model

java - 如何 - Tomcat 从上下文填充单例字符串列表

android - 你如何让一个线程运行它的内容,暂停并重复?

java - 为什么同步在第二个代码中不起作用?

c# - 并发词典的正确用法

java.lang.IllegalArgumentException : The main resource set specified [<jar>] is not valid in Embedded Tomcat

java - 尝试查找数组平均值时数组大小不正确,如何解决此问题?

java - 从 Web 应用程序并行调用许多不同的 Web 服务