实现线程同步的Java函数示例
在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关键字来实现线程同步,在多线程环境中保证共享资源的安全访问。
