《Java并发编程实战》读书笔记-第2章 线程安全性

要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的和可变的状态的访问。

修复多线程问题的方式:

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

什么是线程安全性

当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替运行,并且在主调代码中不需要任何额外的同步或协同,这个类都表现出正确的行为,那么就称这个类是线程安全的。

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

原子性

  • 竞态条件:“先检查后执行”、“读取-修改-写入”等操作
  • 复合操作

加锁机制

  • 内置锁:同步代码块(Synchronized Block)。同步代码块包括两部分:一个作为锁的对象引用,一个作为有这个锁保护的代码块。
  • 重入锁:为每个锁关联一个获取计数器和一个所有者线程。当计数值为0时,这个锁就认为是没有任何线程持有。当线程请求一个未被持有的锁时,JVM将记下锁的持有者,并且将获取计数器置为1。如果同一个线程再次获取这个锁,计数值递增,线程退出同步代码块时,计数器递减。当计数器为0时,锁被释放。重入锁粒度是线程,而不是调用。

猜你喜欢

转载自www.cnblogs.com/zeekik/p/11735678.html