2线程安全性

来源:互联网 发布:商务酒店前台软件系统 编辑:程序博客网 时间:2024/04/29 12:12

当多个线程访问可变的同一个状态变量没有正确的同步,那么就会出现错误,有三种方式可以修复这种错误:

  1. 不在线程之间共享该状态变量
  2. 将状态变量修改为不可变的变量
  3. 在访问状态变量时使用同步
编写并发应用程序的时候,一种准确地编程方式是:首先使代码正确运行,然后在提高代码的速度。即便如此,最好也只是当测试结果和应用需求告诉你必须提高性能,以及测试结果表明这种优化在实际环境中确实能够带来性能提升时,才进行优化。
线程安全性
在线程安全性定义中最核心的概念是准正确性。正确性的含义是,每个类的行为与其规范完全一致。
线程安全性定义:当多个线程访问某个类时,这个类始终能表现出正确的行为,那么这个类就是线程安全性的。
当多个线程访问某个类时,不管运行环境采用何种调度方式或这些线程将如何交替运行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么称这个类是线程安全的。
无状态对象一定是线程安全的。
无状态类的定义:不包含任何域,也不包含任何其他类中域的引用。
竞态条件:在并发编程中,这种由于不恰当的执行时序而出现不正确的结果一种非常重要的情况,这个就是:竞态条件。观察结果的失效是大多数竞态条件的本质。
数据竞争:多线程访问一个非final类型的域没有采用同步进行协同,那么就会出现数据竞争。
当执行时间较长的计算或者可能无法快速完成的操作时(例如,网络I/O或者控制台I/O),一定不要持有锁。

0 0
原创粉丝点击