Java线程安全——学习笔记(一)

本文深入探讨了对象状态的概念、共享与可变性的重要性,以及如何通过同步确保线程安全。重点介绍了Java中的同步机制,并提供了解决并发问题的方法。

        一个对象的状态就是它的数据,存储在状态变量(state variables)中,比如实例域或静态域。对象的状态还包括了其他附属对象的域。例如,HashMap的状态一部分存储到对象本身中,但同时也存储到很多Map.Entry对象中。一个对象的状态包括了任何对它外部可见行为产生影响的数据。

        所谓共享,是指一个变量可以被多个线程访问;所谓可变,是变量的值在其生命周期内可以改变。一个对象是否应该线程安全的取决于它是否会被多个线程访问。线程安全的这个性质,取决于程序中如何使用对象,而不是对象完成了什么。保证对象的线程安全性需要使用同步来协调对其可变状态的访问;若是做不到这一点,就会导致脏数据和其他不可预期的厚国。

        无论何时,只要有多于一个的线程访问给定的状态变量,而且其中某个线程会写入该变量,此时必须使用同步来协调线程对该变量的访问。Java中首要的同步机制是synchronized关键字,它提供了独占锁。除此之外,术语“同步”还包括volatile变量,显示锁和原子变量的使用。

       总结:

      在没有正确同步的情况下,如果多个线程访问了同一个变量,你的程序就存在隐患,有3种方法修复它:
      1. 不要跨线程共享变量
      2. 使状态变量为不可变的;或者
      3. 在任何访问状态变量的时候使用同步

转载于:https://my.oschina.net/czg/blog/142633

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值