`
aimarcby
  • 浏览: 536 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Java并发编程笔记_线程安全性

 
阅读更多

编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的(shared)和可变的(Mutable)状态的访问。

 

Java中同步属于可以包括:

1)synchronized关键字,一种独占加锁方式(内置锁)

2)volatile类型的变量

3)显式锁(Explicit Lock

4)原子变量

 

如果当多个线程访问同一个可变的状态变量时没有使用合适的同步,那么程序就会出现错误。有三种方式可以修复这个问题:

1)不在线程之间共享该状态变量

2)将状态变量修改为不可变的变量

3)在访问状态变量时使用同步

 

当设计线程安全的类时,良好的面向对象技术、不可修改性,以及明晰的不可变性规范都能起到一定的帮助作用。

 

线程安全定义:当多个线程访问某个类时,不管与运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协调,这个类都能表现出正确行为,那么就称这个类时线程安全的。

 

无状态对象一定是线程安全的。

 

竞态条件:程序执行的正确性取决于多线程交替执行的时序,这时就会产生竞态条件。常见的竞态条件有以下场景:

1)先检查后执行(非线程安全的懒加载)

2)读取-修改-写入(++运算)

 

在实际情况中,应尽可能地使用现有的线程安全对象(例如:AtomicLong)来管理类的状态。与非线程安全的对象相比,判断线程安全对象的可能状态及其状态转换情况要更为容易,从而也更容易维护和验证线程安全性。

 

要保持状态的一致性,就需要在单个原子操作中更新所有相关的状态变量。

 

通常,在简单性与性能之间存在着相互制约因素。当实现某个同步策略时,一定不要盲目地为了性能二牺牲简单性(这可能会破坏安全性)。

 

当执行时间较长的计算或者可能无法快速完成的操作时(例如,网络I/O或控制台I/O),一定不要持有锁。

 

分享到:
评论

相关推荐

    java并发编程实践pdf笔记

    这本书的读书笔记涵盖了多个关键知识点,旨在帮助读者深入理解Java并发编程的核心概念。 1. **线程和进程的区别** - **线程** 是程序执行的最小单位,一个进程中可以有多个线程同时执行,共享同一块内存空间,通信...

    Java并发编程学习笔记

    1. 线程安全性:确保共享对象在并发访问时,能够保持一致性和正确性。 2. 内存可见性:确保一个线程修改的变量能够对其他线程立即可见。 3. 锁的使用:如何合理使用内置锁或显式锁(如ReentrantLock)来管理同步。 4...

    JAVA并发编程实践-线程安全-学习笔记

    在Java并发编程中,线程安全是一个至关重要的概念,它涉及到多线程环境下对共享数据的正确管理和访问。线程安全意味着当多个线程同时访问一个对象或数据时,对象的状态能够保持一致性和完整性,不会因为并发导致数据...

    Java并发编程学习笔记.rar

    这本"Java并发编程学习笔记"可能是作者在深入研究Java并发特性、工具和最佳实践过程中积累的心得体会。下面,我们将根据这个主题,探讨一些关键的Java并发编程知识点。 1. **线程与进程**:在多任务环境中,线程是...

    java并发编程实践笔记

    20. **线程限制性的优点:** 通过限制类的状态,可以简化线程安全性的分析。 21. **充分的文档说明:** 并发程序需要更详尽的注释和文档,以便于理解和维护。 22. **使用外部对象作为监视器:** 在需要细分锁分配...

    《java并发编程实战》读书笔记-第2章-线程安全性

    《java并发编程实战》读书笔记-第2章-线程安全性,脑图形式,使用xmind8制作 包括引言、线程安全性定义、原子性、加锁机制、使用锁保护状态、活跃性与性能等内容

    读书笔记-Java并发编程实战-基础篇

    在Java并发编程中,数据的封装与访问控制、线程安全性的考量、同步机制的使用是重要的基础概念和技巧。以下是从给出的文件内容中提取出的详细知识点: 1. 数据封装与访问控制:确保内部私有数据不被轻易访问,并且...

    java并发编程实践笔记资料.pdf

    22. 线程限制性使构造线程安全的类变得更容易,因为类的状态被限制后,分析它的线程安全性时,就不必检查完整的程序。 23. 编写并发程序,需要更全的注释,更多的文档说明。 24. 在需要细分锁的分配时,使用Java...

    笔记_Java并发编程(2).docx

    开发者需要根据具体的应用场景选择合适的并发策略,合理利用多核CPU,优化上下文切换,以及确保程序的正确性和线程安全性。在实际开发中,充分理解并行和并发的区别,合理设置线程数量和时间片长度,可以有效地提高...

    JAVA并发编程实践-线程执行-学习笔记

    并行运行类任务的局限性主要体现在线程安全、竞态条件和死锁等问题上。当多个线程同时访问共享数据时,需要正确地同步和锁定,以防止数据不一致。此外,过多的线程切换和通信开销也可能导致性能下降。 ...

    Java并发编程与高并发解决方案-学习笔记-www.itmuch.com.pdf

    本文将基于文档《Java并发编程与高并发解决方案-学习笔记***.pdf》中提供的内容,来详细阐述并发编程和高并发的基本概念、CPU多级缓存与缓存一致性、以及Java内存模型。 ### 并发与高并发概念 在现代多线程编程中...

    java并发编程.docx

    Java并发编程是Java开发中的重要领域,涉及到多...总结来说,Java并发编程通过线程池管理和ThreadLocal机制,提供了高效且安全的多线程环境。理解并熟练掌握这些概念和技术,对于编写高性能的Java应用程序至关重要。

    Java并发编程学习笔记.

    Java并发编程是Java开发中的重要领域,它涉及到多线程、同步、锁机制、线程池等关键概念,是提高程序性能和效率的关键技术。在Java中,并发编程的运用可以充分利用多核处理器的能力,实现高效的多任务处理。以下是对...

    多线程笔记_java/多线程_

    在多线程环境中,异常处理也非常重要,需要确保线程安全地停止。 通过对上述知识点的学习,开发者可以有效地编写出高效、稳定、可控的多线程程序。在实践中,还需要不断调试和优化,以适应各种复杂的并发场景。

    Java并发编程实战-读书笔记

    《Java并发编程实战》个人读书笔记,非常详细: 1 简介 2 线程安全性 3 对象的共享 4 对象的组合 5 基础构建模块 6 任务执行 7 取消与关闭 8 线程池的使用 9 图形用户界面应用程序 10 避免活跃性危险 11 性能与可...

    JAVA并发编程实践-线程的关闭与取消-学习笔记

    在Java并发编程中,线程的关闭和取消是一项重要的任务,因为不正确的处理可能导致数据不一致、资源泄漏等问题。在Java中,强制停止线程并不是一个推荐的做法,因为这可能会导致系统状态的不稳定。传统的`Thread.stop...

    Java并发编程与高并发解决方案笔记-基础篇.docx

    Java并发编程与高并发解决方案是开发高性能应用的关键技术。在基础篇中,主要涉及以下几个重要知识点: 1. **并发编程基础** - **并发**:并发是指在一个时间段内,多个线程交替执行,使得系统看起来像是同时处理...

    Java并发编程(学习笔记).xmind

    Java并发编程 背景介绍 并发历史 必要性 进程 资源分配的最小单位 线程 CPU调度的最小单位 线程的优势 (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 ...

    《java并发编程实战》读书笔记-第4章-对象的组合

    《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括线程安全类设计、实例封闭、线程安全性委托、现有线程安全类中添加功能和文档化同步策略等内容

Global site tag (gtag.js) - Google Analytics