东西有点乱

Java中主要同步机制是关键字synchronized,它提供了一种独占的加锁方式,但同步这个术语还包括volatile类型的变量,显式锁和原子变量。

如果多个线程访问同一个可变的状态变量时没有使用合适的同步,那么程序就会出现错误。有三种方式可以修复这个问题:

  1. 不在线程之间共享该状态变量
  2. 将状态变量修改为不可变的变量
  3. 在访问状态变量时使用同步

在线程安全类中封装了必要的同步机制,因此客户端无须进一步采取同步机制。

无状态对象一定是线程安全的。

大多数Servlet都是无状态的,从而极大地降低了在实现Servlet线程安全性时的复杂性。只有当Servlet在处理请求时需要保存一些信息,线程安全性才会成为一个问题。

在并发编程中,这种由于不恰当的执行时序而出现不正确的结果是一种非常重要的情况,它有一个正式的名字:竞态条件。

最常见的竞态条件类型就是“先检查后执行”操作,即通过一个可能失效的观测结果来决定下一步的动作。

使用“先检查后执行”的一种常见情况就是延迟初始化。延迟初始化的目的是将对象的初始化操作推迟到实际被使用时才进行,同时要确保只被初始化一次。

为了确保线程安全性,“先检查后执行”(例如延迟初始化)和“读取-修改-写入”(例如递增操作)等操作必须是原子的。我们将“先检查后执行”以及“读取-修改-写入”

等操作统称为复合操作:包含了一组必须以原子方式执行的操作以确保线程安全性。

posted on 2019-05-27 15:35  shammgod_code  阅读(172)  评论(0编辑  收藏  举报

导航