Java synchronized

发布时间 2023-12-08 13:35:06作者: 先锋之客

synchronized是Java中最基本的线程同步机制之一,通过在方法或代码块上添加synchronized关键字,可以确保只有一个线程可以访问该方法或代码块。它是Java中实现线程安全的重要机制之一。

synchronized关键字的使用方式有两种:

1、修饰实例方法
当synchronized关键字修饰一个实例方法时,该方法在被调用时将会获取该实例对象的锁。这意味着,在同一时间内只有一个线程可以访问该实例对象的该方法,其他线程需要等待该锁被释放才能访问该方法。

下面是一个简单的示例,演示了如何使用synchronized关键字修饰实例方法:

public class SynchronizedExample {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }

    public synchronized int getCount() {
        return count;
    }
}

在这个示例中,increment()和getCount()方法都使用synchronized关键字修饰,这意味着同一时间内只有一个线程可以访问这些方法。

2、修饰代码块
synchronized关键字也可以用于修饰代码块,当一个线程进入代码块时,会获取该代码块所在对象的锁,其他线程需要等待该锁被释放才能进入该代码块。

下面是一个简单的示例,演示了如何使用synchronized关键字修饰代码块:

public class SynchronizedExample {
    private final Object lock = new Object();
    private int count = 0;

    public void increment() {
        synchronized (lock) {
            count++;
        }
    }

    public int getCount() {
        synchronized (lock) {
            return count;
        }
    }
}

在这个示例中,我们使用一个普通对象lock作为锁对象,并在increment()和getCount()方法内部的代码块上使用synchronized关键字来获取该锁对象的锁。

总的来说,synchronized关键字提供了一种简单而有效的线程同步机制,它可以确保多个线程之间对共享资源的访问是有序、安全的。但需要注意的是,过度地使用synchronized关键字可能会导致性能问题,因为获取和释放锁都需要消耗一定的时间,而且在某些情况下可能会出现死锁等问题。因此,在使用synchronized关键字时需要慎重考虑并仔细设计同步策略。