java - 了解同步块(synchronized block)

标签 java multithreading synchronize

我不明白为什么最好使用 synchronized(syncObject)synchronized(this) .例如,这个类:

public class Pool implements ObjectPool {
    private Object[] pool;
    private int initialCapacity;
    private int available = 0;
    private int waiting = 0;
    private final Object syncObject = new Object();

    public Pool(int initialCapacity) {
        this.initialCapacity = initialCapacity;
        pool = new Object[initialCapacity]; 
    }

    public void releaseObject(Object o) throws Exception {
        synchronized (syncObject) {
            pool[available] = o;
            available++;
        }

        if (waiting > 0) {
            notify();
        }
    }
}

最佳答案

因为如果你使用 this ,然后另一个线程试图执行另一个方法将不得不等待,而如果你使用一个对象作为锁,你只限制这个关键部分。

关于java - 了解同步块(synchronized block),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24448460/

相关文章:

java - 使用 servlet 打开多个窗口

java - 空指针异常和线程

c# - 等待动态创建的任务直到它们完成

c++ - 线程安全,无锁增量函数?

java - 线程-使用标志解锁锁,然后尝试/最终

PHP:线程代理共享一个公共(public)对象

sql - 在 SQL 中跨表同步 N 个值

java - 使用 Spring 在 JSP 上显示值列表

java - 设备断开连接时 RXTX 仍在读取数据

java - 从对象数组数据java中删除重复项