java - 同步相对于锁 API 的优势

标签 java multithreading

我在每个博客或解释中都看到了 Locks API 相对于同步的优势。

我想知道同步比锁有什么优势,或者我应该更喜欢同步而不是锁的任何场景。

最佳答案

您是指同步语句和方法关键字吗?隐式锁定的主要优点是需要更少的代码并在离开其范围时自动解锁。对于简单的锁定/等待操作,它是完美的解决方案。

所以下面的代码

public void myMethod() {
    synchronized(this) {
       // concurrent stuff
    }
}

完全等同于

final private Lock lock = new ReentrantLock();

public void myMethod() {
    lock.lock();
    try {
        // concurrent stuff
    }
    finally {
        lock.unlock();
    }
}

synchronized public void myMethod() {
    // concurrent stuff
}

您还可以使用不同的对象进行同步(它们不会受到任何影响,只是控制点):

final static private Object sync = new Object();

public void method1() {
    synchronized(sync) {
        // concurrent code involving static members
    }
}

public void method2() {
     synchronized(this) {
         // concurrent code affecting this instance
     }
}

关于java - 同步相对于锁 API 的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31364307/

相关文章:

java - 从字符串中提取逗号分隔的值

c++ - 开始学习如何编写包含互斥量和信号量使用的极其简单的多线程 C++ 程序的最佳方法是什么?

.net - 在Rx中,处理线程安全是消费者(IObserver)的责任吗?

c++ - 如何正确地从 shared_ptr 移动/读取

multithreading - 关于线程退出

c++ - 在 Visual Studio 中直接调用 MATLAB(多线程)

java - UDP 支持多个连接到同一个端口,发送和接收

java - 扫描 env 属性文件时忽略 PropertySource 属性文件

java - java中如何获取并打印字符串

java - Dropbox 分块上传