java使用多线程防止并发的案例
时间: 2024-12-17 15:52:13 浏览: 1
Java中通过多线程可以处理并发操作,但是如果不加控制可能会导致数据不一致或者其他并发问题。一个常见的例子是“竞态条件”(Race Condition),比如共享变量的修改。假设有一个计数器类,初始值为0:
```java
public class Counter {
private int count = 0;
public void increment() {
count++;
}
// 其他方法...
}
```
如果两个线程同时调用`increment()`,如果没有同步措施,可能会得到意想不到的结果,例如最终计数值不是期望的1而是其他值。
为了防止这种情况,Java提供了一种称为“synchronized”的关键字来确保在同一时间只有一个线程访问特定代码块。例如:
```java
public synchronized void increment() {
count++;
}
```
或者更推荐使用`AtomicInteger`等内置并发工具类:
```java
import java.util.concurrent.atomic.AtomicInteger;
public class ThreadSafeCounter {
private AtomicInteger count = new AtomicInteger(0);
public void increment() {
count.incrementAndGet();
}
}
```
这样就可以保证每次`increment()`操作都是原子性的,并且不会有竞态条件的问题。
阅读全文