java并发实战读书笔记(一)-线程安全

1 共享和可变状态
线程安全主要针对状态访问操作进行管理,特别是共享和可变状态的访问
(1) 共享
共享意味着多线程可同时访问。
(2)可变:
可变意味着变量的值在其生命周期内可变。
每个共享的和可变的变量(被多线程同时访问)都应该由一个锁来保护。
2 线程安全
多线程访问某个类是,该类始终表现出正确的行为,那么称之为这个类为线程安全。通俗的解释就是,在多线程下的执行结果和单线程一直。
无状态或不可变对象一定是线程安全的。
3 竞态条件
当程序执行的结果取决于多线程交替执行时序是,就会发生竞态条件。个人认为最常见的竞态条件类型有两种:
(1)先检查后执行:通过一个可能会失效的观测结果去决定下一步动作,如延迟初始化。故在此单例模式出现两种形式:饿汉模式(非线程安全),饱汉模式(线程安全)
(2)读取-修改-写入(自加,自减等非原子性操作): 类型第一种.
4 加锁机制
解决竞态问题:保证操作原子性。
(1 )内置锁(互斥锁):同步代码块 最多只有一个线程访问
包括以对象为锁

 synchronized(lock){
  ....
  }

以代码块为锁

访问修饰符+synchronized+method(args){
}

(2)重入锁:某个线程再次成功获取一个已经有它持有的锁。 重入的一种实现方式:
为每一个锁关联一个获取计数值value和一个所有者线程thread,当锁为被任何线程持时,value=0 ; 当线程请求一个未被持有的锁,jvm将记下该持有者线程,并将value设为1;如果该线程再次获取该锁,value递增,当该线程退出同步代码块,value递减,当value=0时,锁被释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值