Java 并发面试题, 什么是 Java 中的线程同步?
Java 并发面试题, 什么是 Java 中的线程同步?
QA
Step 1
Q:: 什么是 Java 中的线程同步?
A:: 线程同步是指在多线程环境中控制多个线程对共享资源的访问。Java 提供了多种方式来实现线程同步,例如 synchronized 关键字、Lock 接口和原子变量(Atomic Variables)等。通过使用这些工具,可以避免线程间的竞争条件,确保数据的一致性和正确性。
Step 2
Q:: 什么是 synchronized 关键字,如何使用?
A:: synchronized 关键字用于确保一个线程一次只能访问一个代码块或方法。它可以用于方法(同步方法)或代码块(同步代码块)。例如:
public synchronized void method() {
//
同步方法
}
public void method() {
synchronized(this) {
//
同步代码块
}
}
Step 3
Q:: 什么是死锁,如何避免?
A:: 死锁是指两个或多个线程互相等待对方释放资源,导致程序无法继续执行的现象。避免死锁的方法包括:避免嵌套锁定、使用超时尝试获取锁、按固定顺序获取锁等。
Step 4
Q:: 什么是 Java 中的 Lock 接口,如何使用?
A:: Lock 接口提供了比 synchronized 更加灵活的锁定操作。主要方法包括 lock() 和 unlock()
。示例:
Lock lock = new ReentrantLock();
try {
lock.lock();
//
临界区代码
} finally {
lock.unlock();
}
Step 5
Q:: 什么是原子变量,如何使用?
A:: 原子变量(Atomic Variables)是 Java 提供的一种用于无锁并发编程的工具类,主要位于 java.util.concurrent.atomic 包下。常用的原子变量有 AtomicInteger、AtomicLong 等。它们通过 CAS(Compare-And-
Swap)操作确保原子性。示例:
AtomicInteger atomicInteger = new AtomicInteger(0);
int newValue = atomicInteger.incrementAndGet();