在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源。如,同一内存区(变量,数组,或对象)、系统(数据库,web services等)或文件。实际上,这些问题只有在一或多个线程向这些资源做了写操作时才有可能发生,只要资源没有发生变化,多个线程读取相同的资源就是安全的。
0x02、Java中实现线程安全的方法
在Java多线程编程当中,提供了多种实现Java线程安全的方式:
最简单的方式,使用
Synchronization
关键字:Java Synchronization介绍使用
java.util.concurrent.atomic
包中的原子类,例如AtomicInteger
使用
java.util.concurrent.locks
包中的锁使用线程安全的集合
ConcurrentHashMap
使用
volatile
关键字,保证变量可见性(直接从内存读,而不是从线程cache读)