synchronized使用实例
时间: 2023-08-10 12:24:09 浏览: 81
Java synchronized使用案例
下面是一个使用synchronized关键字实现线程同步的例子:
```java
public class Counter {
private int count;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
```
在这个例子中,我们定义了一个计数器类Counter,它有一个私有的count成员变量,以及两个synchronized方法increment()和getCount()。这两个方法都被修饰为synchronized,这意味着在同一时刻只有一个线程可以执行它们。这样可以保证对count变量的操作是线程安全的,避免了多个线程同时修改count变量的情况。
下面是一个使用Counter类的例子:
```java
public class Main {
public static void main(String[] args) {
Counter counter = new Counter();
Thread t1 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
counter.increment();
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
counter.increment();
}
});
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(counter.getCount()); // 输出:20000
}
}
```
在这个例子中,我们创建了两个线程t1和t2,它们都会执行Counter类的increment()方法,将计数器加1。由于increment()方法是被synchronized修饰的,所以在同一时刻只有一个线程可以执行该方法。最终的输出结果应该是20000,这说明了在多线程环境下使用synchronized可以保证数据的正确性。
阅读全文