可见性
在不同线程对同一个对象的读写操作时,线程的可见性显得尤为的重要,为了确保多个线程之间对内存的写入操作的可见性,必须使用同步机制,因为我们没法确保执行读操作的线程能实时的读取到写操作线程刚刚写入的值。
同步机制:
对于上图的同步机制,可以使用volatile关键字来修饰对象实现,但并不推荐,因为它不能完全的保证对象的线程安全,他是java语言提供的一种轻量的、稍弱的同步机制;volatile变量对可见性的影响比volatile变量本身更加重要。当线程A首先写入一个volatile变量并且线程B随后读取该变量时,在写入volatile变量之前对A可见的所有变量的值,在B读取了volatile变量之后,对B也是可见的。因此,从内存的角度来说,写入volatile变量相当与退出了同步代码块,而读取volatile变量的值相当与进入了同步代码块。然后,我们并不建议过度依赖volatile变量提供的可见性。如果在代码里通过volatile变量来控制状态的可见性,通常比使用锁更加的脆弱,也更加难以理解!
对象的发布和溢出
发布:使对象能在当前作用域之外的代码处使用;
溢出:对某个不应发布的对象进行发布的时候,就称溢出;
溢出会破坏程序的封装性,导致程序变的难以维护,一个非线程安全的内部对象溢出后,会破坏线程的安全,导致意想不到的后果!
如上图这样发布一个数组,任何调用者都可以修改这个数组的内容,在这里,数组states已经逾越了它的作用范围了,因为这个本应该是私有的变量被发布了。
最后一个发布要注意的是,不要在构造中,通过内部类的方式,隐式的发布一个this引用!
上面例子中,注册监听的时候,创建了一个匿名内部类,在这个匿名内部类中,隐式的包含了ThisEscape的this引用,使得在这个匿名内部类中可以访问和修改ThisEscape的作用域。可以通过工厂模式来解决这个问题:
线程封闭
线程封闭是指将一些共享的对象,基于安全考虑,感觉全部封闭在线程内,不让其他线程访问,通过避免使用同步技术来达到不共享数据的方式;比较合理的封闭有两种,一种是栈封闭,还有一种是JDK提供的更加规范的方式,使用ThreadLocal类来完成;
栈封闭:
栈封闭是线程封闭的一种特例,在栈封闭中,只有通过局部变量才能访问对象。
相关推荐
在Java并发编程中,数据的封装与访问控制、线程安全性的考量、同步机制的使用是重要的基础概念和技巧。以下是从给出的文件内容中提取出的详细知识点: 1. 数据封装与访问控制:确保内部私有数据不被轻易访问,并且...
《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括可见性、发布与逸出、线程封闭、不可变性、安全发布等内容
《Java并发编程实战》个人读书笔记,非常详细: 1 简介 2 线程安全性 3 对象的共享 4 对象的组合 5 基础构建模块 6 任务执行 7 取消与关闭 8 线程池的使用 9 图形用户界面应用程序 10 避免活跃性危险 11 性能与可...
使用java.util.concurrent类库构造安全的并发应用程序的基础。共享其实就是某一线程的数据改变对其它线程可见,否则就会出现脏数据。
本文将基于文档《Java并发编程与高并发解决方案-学习笔记***.pdf》中提供的内容,来详细阐述并发编程和高并发的基本概念、CPU多级缓存与缓存一致性、以及Java内存模型。 ### 并发与高并发概念 在现代多线程编程中...
《Java并发编程实践》这本书是Java开发者深入理解并发编程的重要参考。以下是对书中关键知识点的总结: 1. **线程和进程的区别** - **线程**:是程序执行的最小单位,一个进程中可以有多个线程,它们共享同一块...
### Java并发编程与高并发解决方案知识点总结 #### 一、并发与高并发基本概念 ##### 1.1 并发 - **定义**: 指一个程序在同一时刻拥有两个或更多的线程,这些线程可以在单核或多核处理器上运行。 - **单核处理器上...
《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括线程安全类设计、实例封闭、线程安全性委托、现有线程安全类中添加功能和文档化同步策略等内容
在Java并发编程中,线程安全是一个至关重要的概念,它涉及到多线程环境下对共享数据的正确管理和访问。线程安全意味着当多个线程同时访问一个对象或数据时,对象的状态能够保持一致性和完整性,不会因为并发导致数据...
总的来说,Java并发编程实践中的任务执行是一个涉及线程调度、线程池管理、任务生命周期控制、结果处理等多个方面的复杂主题。理解和掌握这些概念和技术,能够帮助开发者编写出更加高效、可靠的并发程序。
这本书的读书笔记涵盖了多个关键知识点,旨在帮助读者深入理解Java并发编程的核心概念。 1. **线程和进程的区别** - **线程** 是程序执行的最小单位,一个进程中可以有多个线程同时执行,共享同一块内存空间,通信...
Java并发编程与高并发解决方案是开发高性能应用的关键技术。在基础篇中,主要涉及以下几个重要知识点: 1. **并发编程基础** - **并发**:并发是指在一个时间段内,多个线程交替执行,使得系统看起来像是同时处理...
本笔记将深入探讨Java的基础知识和核心概念。 1. **Java基础** - **语法**:Java语法与C++类似,但更加简洁。例如,Java使用垃圾回收机制自动管理内存,避免了C++中的内存泄漏问题。 - **类与对象**:Java是面向...
【Java技术资料】-(机构内训资料)Java并发体系学习思维笔记 在Java编程领域,并发编程是一项至关重要的技能,特别是在多线程环境和分布式系统中。这份机构内训资料,通过“Java并发体系学习思维笔记”,为我们...
《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括同步容器类、并发容器类、阻塞队列和生产者消费者模式、阻塞和中断方法、同步工具类。最后是构建高效且可伸缩的结果缓存
### Java并发编程实践笔记知识点详解 #### 一、保证线程安全的方法 1. **不要跨线程访问共享变量:** 当多个线程共享某个变量时,若其中一个线程修改了该变量,其他线程若没有正确同步,则可能读取到错误的数据。...
学习Java并发编程时,锁的概念是无法回避的。锁是同步的一种机制,用来控制多个线程访问共享资源的顺序。在Java中,锁主要有两种类型:内置锁和显示锁。内置锁使用synchronized关键字实现,而显示锁则是通过java....
Java并发编程是Java开发中必不可少的一部分,涉及到多线程、同步机制、线程池以及并发工具类等多个核心知识点。以下是对这些主题的详细说明: 1. **线程安全与锁 Synchronized 底层实现原理**: 线程安全是指在多...
### Java高并发核心知识点解析 #### 一、同步与异步 **同步(Synchronous)** ...通过对这些概念的学习,开发者可以更好地掌握Java并发编程的核心思想和技术要点,进而提高系统的整体性能和稳定性。