欢迎访问宙启技术站
智能推送

实现线程同步的Java函数示例

发布时间:2023-10-19 03:32:51

在Java中,线程同步常常使用关键字synchronized来实现。关键字synchronized是用来控制对共享资源的访问的,它包括两种用法:synchronized方法和synchronized代码块。

1. synchronized方法:

synchronized方法就是在方法的声明中使用synchronized关键字。当一个线程调用一个synchronized方法时,它会自动获得该方法调用所属对象的锁,从而确保同一时间只有一个线程可以执行该方法。

下面是一个使用synchronized方法实现线程同步的示例代码:

public class SynchronizedMethodExample {
    private int count = 0;

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

在上面的代码中,increment()方法被声明为synchronized,所以只有一个线程可以同时执行该方法,从而保证了count变量的线程安全。

2. synchronized代码块:

synchronized代码块可以精确地控制一段代码,而不是整个方法。synchronized代码块由一个锁对象和一个代码块组成。当一个线程进入到synchronized代码块时,它会自动获得锁对象的锁,从而确保同一时间只有一个线程可以执行该代码块。

下面是一个使用synchronized代码块实现线程同步的示例代码:

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

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

在上面的代码中,increment()方法中的synchronized代码块使用了一个Object类型的锁对象lock来控制线程的访问。只有获得lock对象的线程才能执行代码块中的逻辑,从而保证了count变量的线程安全。

需要注意的是,synchronized方法和synchronized代码块可以用任何对象作为锁。在上面的示例中,我们使用了一个普通的Object类型对象作为锁,也可以使用this关键字作为锁。此外,在使用synchronized代码块时,我们通常要保证所有的线程都使用同一个锁对象。

综上所述,我们可以通过使用synchronized关键字来实现线程同步,在多线程环境中保证共享资源的安全访问。