java如何保证线程安全
同步方法
方法上添加
synchronized
关键字,可以将整个方法作为同步块。当一个线程访问该方法时,其他线程必须等待,直到当前线程执行完毕。
同步代码块
在代码块中添加
synchronized
关键字,并指定锁对象,可以更细粒度地控制同步范围。锁对象可以是this
(当前对象锁)、Class
对象(类锁)或其他任意对象。
锁
Lock接口实现的各种锁,比如ReentrantLock。
原子类
java.util.concurrent.atomic
包提供了多个原子类,如AtomicInteger
、AtomicLong
、AtomicReference
等,这些类通过CAS(Compare-And-Swap)操作保证线程安全,无需使用同步机制。
不可变对象
final修饰的不可变对象,一旦创建后,其状态就不能被修改。由于不可变对象的状态不会改变,因此天然线程安全。
线程安全的集合
java.util.concurrent
包提供了多个线程安全的集合类,如ConcurrentHashMap
、BlockingQueue
等,这些集合类通过锁分段、CAS等技术保证线程安全。