想要保证并发访问的安全性,我们可以从以下两个不同的角度进行思考:
- 访问状态变量时使用同步,变 “多线程” 为 “单线程”,即避免多个线程在同一时刻访问相同数据;
- 确保被访问的对象是线程安全的;
除了以上两种方式以外,还有一种方式是不在线程之间共享任何变量,我们可以使用无状态变量,它有如下特点:
- 不包含任何域;
- 不包含任何其他类中域的引用;
- 计算过程中的临时状态仅保存在线程的操作数栈上,不会被保存在堆中。
注:Servlet 就是典型的无状态变量,因为请求的处理要保证并发性。
我们将在以下两小节对这两种方式是如何保证多线程并发访问相同数据时的安全性进行详细阐述。