江明涛的博客
使用 synchronized 关键字实现线程同步
使用 synchronized 关键字实现线程同步

使用 synchronized 关键字实现线程同步

在Java中,使用synchronized关键字可以实现线程同步,确保多个线程之间的操作按照一定的顺序执行,避免数据的竞争和不一致性问题。

线程同步是多线程编程中非常重要的概念,可以避免多个线程对共享资源的并发访问导致的数据混乱问题。在实际应用中,经常需要对共享资源进行加锁,以保证同一时间只有一个线程能够访问该资源。

使用synchronized关键字可以达到这个目的。当一个线程进入到synchronized代码块时,它会尝试获取锁。如果锁没有被其他线程持有,则当前线程可以获取锁并执行代码块。如果锁已经被其他线程持有,则当前线程会被阻塞,直到获取锁为止。

下面是一个使用synchronized关键字实现线程同步的示例:

public class SynchronizedExample implements Runnable {
    
    private int count = 0;
    @Override
    public void run() {
        for (int i = 0; i < 10000; i++) {
            increment();
        }
    }
    private synchronized void increment() {
        count++;
    }
    public int getCount() {
        return count;
    }
}

在这个示例中,我们定义了一个SynchronizedExample类,实现了Runnable接口。在run方法中,我们通过调用increment方法对count进行自增操作。

注意到increment方法前面有一个synchronized关键字修饰,这表示这个方法是同步方法。当一个线程调用该方法时,会获取到SynchronizedExample对象的锁,其他线程需要等待锁释放才能执行该方法。

在主线程中,我们创建了两个SynchronizedExample实例,并分别使用两个线程去执行它们。最后,我们分别获取两个实例的count值,可以看到它们最终都被正确地自增了10000次。

Synchronized关键字的使用使得多个线程按照一定的顺序执行代码块或方法,避免了数据的竞争和不一致性问题。它在实际应用中非常有用,并且是Java并发编程中常用的一种方式。