线程安全性
- 一个对象是否需要时线程安全的,取决于它是否被多个线程访问。要使得对象是线程安全的们需要采用同步机制来协同对对象可变状态的访问。
- 当多个线程同时对一个状态变量进行写操作时,必须采用同步机制来协同这些线程对变量的访问,Java中使用关键字synchronized,否则程序会在未来某一时刻发生错误。
- 多线程会共享资源,因此当多个线程同时争抢一个资源时,如果不进行同步处理就会产生冲突,即是线程不安全的,而对于无状态的对象也一定是线程安全的。- 一种常见的错误想法是,只有在写入共享变量时才需要使用同步,然而事实并非如此。
原子性
具有原子性的操作被称为原子操作。原子操作在操作完毕之前不会线程调度器中断,即不可分割。
- 理解事务——原子性、一致性、隔离性和持久性
- Java并发总结(二):同步与原子性
- java.util.concurrent.atomic包下包含了一些原子操作的类,其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择一个另一个线程进入,这只是一种逻辑上的理解。详情见:java.util.concurrent.atomic原子操作类包