java并发编程实战(一)

1、线程安全性

编写线程安全带额代码,其核心就是要对于对象的状态进行操作操作管理,特别对于共享的shared和可变的mutable状态的访问,对象的状态是指存储在状态变量(实例和静态域) 中的数据。

共享即多个线程可以同时访问,可变即变量的值在生命周期内可以发生变化。同步方式:synchronized,voliate,显示锁和原子性

2、当多个线程同时访问一个可变的状态变量时,需要同步机制,三种方式修复同步问题:、

a、不在线程之间共享该状态变量。

b、将状态变量修改为不可变得变量。

c、在访问状态变量时使用同步。

多线程编码的原则:首先应使代码正确运行,然后在提高代码的运行速度。即便如此,最好也只是当性能测试结果和应用需求必须要提高性能是,以及测量结果表明这种优化在实际环境中缺失能够带来性能提升,才进行优化。    

3、竞态条件

a、产生原因:在多线程中,某个变量的取值取决于 线程之间的交替执行结果。

b、最常见的竞态条件类型就是“先检查后执行”。

c、参考范例:延迟初始化中的竞态条件。

 

额外问题:

1、类似servlet大部分的无状态对象为什么是线程安全的?

答:在大部分的servlet是无状态的,它既不包含任何域,也不包含任何对于其他类的引用。

计算过程中的临时状态仅存在于线程栈上的局部变量中,并且只能由正在执行的线程访问,一个线程访问servlet并不影响两一个servlet线程中的结果,因为这两个线程并没有共享状态,就像使用不同的实例,由于线程访问无状态对象的行为并不会影响其他线程中操作的正确性,因此无状态对象是线程安全的。                                                                                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值