编写线程安全的代码实质就是管理对状态的访问,而且通常是共享的。可变的状态,对象的状态就是数据,存储在状态变量中,比如实例域,或者静态域,同时还包含了其它附属的域,例如hashmap的状态一部分存储到对象本身中,但同时也存储到很多mqp.entry中对象中,一个对象的状态还包含了任何会对他外部可见行为产生影响的数据。
所谓共享是指一个对象可以被多个线程访问,
所谓可变:是指变量的值在其生命周期内可以改变,
真正目的:在不可控制的并发访问中保护数据
线程安全必要条件:
1:对象是否被两个或以上的线程访问 某个线程是否会写入该变量 此时必须使用同步来协调线程对该变量的访问
线程安全的条件是程序中如何使用对象,而不是对象做了什么。
杜绝并发的情况的措施:
1:不要跨线程共享变量。
2:状态变量为不可变。
3:在任何访问状态变量的时候使用同步
线程作为时序调度的基本单元–没有明确协调的情况下 线程间相互同步的或者异步的执行
面向对象的技术 封装和数据隐藏 不仅可以编写组织良好可维护的类,还可以,还可以创建线程安全的类 程序的状态封装的越好线程就越使用这种安全 对于并发代码要更加坚定的遵循这个实践。
当某个变量的值,会制约其它几个变量的值时,因此更新一个变量的值时,要在同一原子操作中更新其它几个变量的值。保护状态一致性
java并发编程线程安全
时间: 2024-10-12 01:57:10