在Java中,原始变量(primitive variables)指的是基本数据类型变量,如int、long、boolean等。当多个线程同时访问和修改同一个原始变量时,会出现线程安全问题。
多线程访问原始变量主要存在以下问题:
private volatile int counter = 0;
优势:
限制:
private int counter = 0;
public synchronized void increment() {
counter++;
}
优势:
缺点:
private AtomicInteger counter = new AtomicInteger(0);
public void increment() {
counter.incrementAndGet();
}
优势:
private final Lock lock = new ReentrantLock();
private int counter = 0;
public void increment() {
lock.lock();
try {
counter++;
} finally {
lock.unlock();
}
}
优势:
public class ThreadSafeCounter {
// 使用AtomicInteger实现线程安全计数器
private AtomicInteger atomicCounter = new AtomicInteger(0);
// 使用volatile实现可见性
private volatile boolean running = true;
public void increment() {
atomicCounter.incrementAndGet();
}
public int getCount() {
return atomicCounter.get();
}
public void stop() {
running = false;
}
public boolean isRunning() {
return running;
}
}
在实际开发中,应根据具体场景选择合适的同步机制,平衡性能需求和线程安全要求。
没有搜到相关的文章