java线程安全-java并发编程实践

        编写线程安全的代码,本质上就是管理对状态的访问,并且一般是共享的、可变的状态java

        通俗地说,一个对象的状态就是它的数据,存储在状态变量中,好比实例域或静态域。对象的状态还包括了其余附属对象域。例如,HashMap的状态一部分存储到对象自己中,但同时也存储到不少Map.Entry对象中。一个对象的状态包含了任何对它外部可见行为产生影响的数据。安全

        所谓共享,是指一个变量能够被多个线程访问;所谓可变,是指变量的值在其生命周期内能够改变。咱们讨论的线程安全性好像是关于代码的,可是咱们真正要作的,是在不可控制的并发访问中保护数据
并发

        一个对象是否应该是线程安全的,取决于它是否会被多个线程访问。线程安全的这个性质,取决于程序中如何使用对象 ,而不是对象完成了什么。保证对象的线程安全性须要使用同步协调对其可变状态的访问;如果作不到这一点,就会致使脏数据和其余不可预期的后果。
spa

        不管什么时候,只要有多于一个线程访问给定的状态变量,并且其中某个线程会写入该变量,此时必须使用同步来协调线程对该变量的访问。java中首要的同步机制是synchronized关键字,它提供了独占锁。除此以外,术语”同步“还包括
线程

volatile变量,显示锁和原子变量的使用。对象

 在没有正确同步的状况下,若是多个线程访问了同一个变量,你的程序就存在隐患。有3种方法修复它:生命周期

  • 不要跨线程共享变量。同步

  • 使状态变量为不可变的;或者变量

  • 在任何访问状态的时候使用同步。   程序

相关文章
相关标签/搜索