面试题:什么是 Java 中的线程同步?

在 Java 中,线程同步是指控制多个线程对共享资源的访问,以确保在同一时间只有一个线程可以访问共享资源,从而避免数据不一致或其他并发问题。线程同步的主要目的是防止多个线程同时修改共享数据,导致数据损坏或不一致。

Java 提供了多种机制来实现线程同步,包括:

  1. synchronized 关键字
    • 可以用于方法或代码块,确保同一时间只有一个线程可以执行被同步的代码。
    • 例如:
      public synchronized void synchronizedMethod() {
          // 线程安全的代码
      }
      
      public void someMethod() {
          synchronized (this) {
              // 线程安全的代码块
          }
      }
  2. ReentrantLock
    • ReentrantLock 是 java.util.concurrent.locks 包中的一个类,提供了比 synchronized 更灵活的锁定机制。
    • 例如:
      import java.util.concurrent.locks.Lock;
      import java.util.concurrent.locks.ReentrantLock;
      
      public class Example {
          private final Lock lock = new ReentrantLock();
      
          public void someMethod() {
              lock.lock();
              try {
                  // 线程安全的代码
              } finally {
                  lock.unlock();
              }
          }
      }
  3. volatile 关键字
    • volatile 关键字用于修饰变量,确保变量的可见性。当一个线程修改了 volatile 变量的值,其他线程可以立即看到修改后的值。
    • 例如:
      public class Example {
          private volatile boolean flag = false;
      
          public void toggleFlag() {
              flag = !flag;
          }
      }
  4. Atomic 类
    • java.util.concurrent.atomic 包提供了一系列原子类(如 AtomicIntegerAtomicLong 等),这些类提供了原子操作,无需使用锁即可实现线程安全。
    • 例如:
      import java.util.concurrent.atomic.AtomicInteger;
      
      public class Example {
          private AtomicInteger counter = new AtomicInteger(0);
      
          public void increment() {
              counter.incrementAndGet();
          }
      }

通过使用这些机制,可以有效地实现线程同步,确保多线程环境下的数据一致性和线程安全。

THE END
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容