在Java中,要使类方法同步,可以使用synchronized
关键字。同步方法可以确保在同一时刻只有一个线程能够访问该方法,从而防止多线程环境下的数据不一致问题。
以下是一个简单的示例,展示了如何将类方法同步:
public class SynchronizedExample {
private int counter = 0;
// 同步方法
public synchronized void increment() {
counter++;
}
// 同步代码块
public void decrement() {
synchronized (this) {
counter--;
}
}
public static void main(String[] args) {
SynchronizedExample example = new SynchronizedExample();
// 创建两个线程,一个用于递增计数器,另一个用于递减计数器
Thread incrementThread = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
example.increment();
}
});
Thread decrementThread = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
example.decrement();
}
});
// 启动线程
incrementThread.start();
decrementThread.start();
// 等待线程执行完成
try {
incrementThread.join();
decrementThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 输出结果
System.out.println("Counter: " + example.counter);
}
}
在这个示例中,我们有两个方法:increment()
和decrement()
。通过在方法声明前添加synchronized
关键字,我们将其声明为同步方法。这意味着在同一时刻只有一个线程能够访问这些方法。
另外,我们还可以使用同步代码块来实现同步。在decrement()
方法中,我们使用synchronized (this)
来同步代码块,其中this
表示当前对象实例。这样,在同一时刻也只有一个线程能够执行这个同步代码块内的代码。