跳转至
用户认证 - eMac Tech Docs

用户认证

重要提醒

为了您的权益以及学习体验,请不要外借账号!

如果您没有账号或忘记密码,请联系管理员重置密码。

请输入您的登录信息

线程同步机制

同步方式对比

flowchart TD
    subgraph 同步机制
        sync[synchronized]
        lock[ReentrantLock]
        atomic[原子类]
        collection[并发集合]
    end

锁优化技术

  1. 锁消除:JIT编译器消除不必要的锁
  2. 锁粗化:合并多个同步块
  3. 偏向锁:无竞争时减少开销
  4. 自旋锁:短时间等待不挂起线程
  5. 锁升级:偏向锁->轻量级锁->重量级锁

并发集合示例

// 1. ConcurrentHashMap
Map<String, Integer> map = new ConcurrentHashMap<>();
map.put("a", 1);

// 2. CopyOnWriteArrayList
List<String> list = new CopyOnWriteArrayList<>();
list.add("item");

// 3. BlockingQueue
BlockingQueue<String> queue = new ArrayBlockingQueue<>(10);
queue.put("task");
String task = queue.take();

线程通信方式

// 1. wait/notify
synchronized(lock) {
    while(!condition) {
        lock.wait();
    }
    // 处理逻辑
    lock.notifyAll();
}

// 2. Condition
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
lock.lock();
try {
    while(!conditionMet) {
        condition.await();
    }
    // 处理逻辑
    condition.signal();
} finally {
    lock.unlock();
}

// 3. CountDownLatch
CountDownLatch latch = new CountDownLatch(3);
// 线程中调用 latch.countDown();
latch.await(); // 等待计数归零

最佳实践

  1. 优先使用并发集合
  2. 减小同步范围
  3. 避免嵌套锁
  4. 使用读写锁提高读性能
  5. 考虑使用无锁算法