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

《java 并发编程实战》对象共享笔记

 
阅读更多

 

 1.对象的可见性,是指对象的修改,对其他线程可见,具体的方法可以使用同步机制或者使用valatile 关键字防止jvm 虚拟机对指令就行重排序,为什么jvm 会对指令进行重排序,是因为重排序使得指令的执行变得紧凑

指令重排序:就是处理器处理汇编代码时,有依赖关系,导致下一个结果。需要上一个计算的结果

例如:a =b+c

      d=e-f 

 

   换算成汇编:是指: lw R1b  lwR2c  sadd a R1R2

 

    if id ex mem wb

       if id  ex mem wb

           if id 等待 ex mem wb

 

不安全的因素有:(1)失效的数据,例如一个pojo 类,一个线程修改了具体的属性,而另外一个线程读取的是原有的属性,导致出现无效的数据。(2) 非原子的64位操作,jvm 对long ,double 类型是分两个32位存储的,当读取一个非volatile long 类型时,可能一个线程写入了32位,另外一个线程读取时,就会读取写入的32位和另外一个32位,导致数据出现异常。

 

2.对象的发布与逃逸

发布一个对象是指:是当前对象能够在当前作用域之外访问,具体的有,将一个public 方法返回该对象或者是将该对象传递给一个方法中,对象的逃逸就是指,当某个对象在没有构造完成之前被发布了,这种想象就是对象的逃逸,例如this 逃逸,情况是在构造函数中构造了匿名类,此时这个匿名类就可以访问外围对象的this,在多线程的情况下,这个对象不一定构造完成,所以他不是线程安全的

 

3.线程封闭的

当访问共享的可变数据时,通常需要使用同步。一种避免使用同步的方式就是不共享数据。如果仅在单线程内访问数据,就不需要同步。这种技术被称为线程封闭

线程封闭的主要技术有,ad-hoc线程封闭,栈封闭和threadlocal 封闭

3.1 ad-hoc 线程封闭是指,维护线程封闭的职责完全有程序承担,这句话我的理解是,线程维护线程安全就是让程序猿自己去控制,

3.2 栈封闭,就是将数据放到方法中去,就是使用临时变量,不使用全局变量,因为jvm 虚拟机栈是线程私有的,每个线程都有一份自己的线程栈,他们是隔离的,但是要注意的是,不能让局部变量逃逸,如果局部变量逃逸,其他对象可以使用的话,不能保证线程的安全性,

3,3 threadlocal 封闭,就是将实例变量定义为threadLocal 类型,因为ThreadLocal 是保证了变量在每个线程都有一份副本,采用是空间换时间的概念,避免了使用线程同步导致的性能问题,ThreadLocal 是每个线程有一份,通过get 方法,获取线程的ThreadLocalMap ,讲当前threadlocal 对象作为key 值,进去查询的,所以每个线程都有自己的一份ThreadLocal对象 ,ThreadLocalMap 是采用弱类型的,利于JVM gc 回收,不用担心内存溢出问题,

 

 

分享到:
评论

相关推荐

    java并发编程实践pdf笔记

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

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

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

    Java并发编程学习笔记.rar

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

    java并发编程实践笔记

    ### Java并发编程实践笔记知识点详解 #### 一、保证线程安全的方法 1. **不要跨线程访问共享变量:** 当多个线程共享某个变量时,若其中一个线程修改了该变量,其他线程若没有正确同步,则可能读取到错误的数据。...

    并发编程之一 日常学习笔记

    综上所述,这一系列学习笔记涵盖了并发编程的关键概念和实战技巧,包括Java内存模型、线程池、并发容器的使用以及常见数据结构的线程安全问题。通过深入学习这些内容,开发者可以更好地理解和解决多线程环境下的编程...

    Java 并发编程学习笔记之核心理论基础

    总结来说,Java并发编程的核心理论包括共享性、互斥性、线程间通信以及各种同步和并发工具的使用。理解并熟练运用这些理论和工具,是编写高效、安全的并发代码的基础。在实际编程中,我们需要根据具体场景选择合适的...

    Java 并发编程学习笔记之Synchronized底层优化

    Java并发编程中的Synchronized是Java实现线程同步的关键机制,其在JDK1.6之后进行了大量的优化,包括引入了轻量级锁和偏向锁,以提升并发性能。以下是关于这些优化的详细解释: **一、重量级锁** 重量级锁是基于...

    Java jdk1.7学习笔记pdf

    - **并发API**:扩展了Java并发工具集,包括`ForkJoinPool`和`ConcurrentHashMap`的新特性等。 - **JMX API**:增强了Java管理扩展(JMX)的功能,便于远程管理和监控Java应用程序。 #### 三、深入理解Java JDK 1.7...

    《java学习》-java后端学习笔记.zip

    这份《java学习》-java后端学习笔记.zip压缩包包含了多个关键主题,旨在帮助初学者和有经验的开发者深入理解Java编程语言及其在后端应用中的实践。以下是这些主题的详细解析: 1. Git&GitHub.pdf:版本控制系统Git...

    《IT学习资料》-java后端学习笔记.zip

    5. **Java多线程**:这部分内容可能涉及Java并发编程,包括线程的创建、同步、锁机制、并发工具类等,这些都是构建高性能、高并发应用的关键知识。 6. **Java基础**:这部分可能涵盖了Java语言的基本语法、数据类型...

    java全集资料共享网盘链接

    - **并发编程**:学习Java并发包中的工具类,如Executor框架、CountDownLatch、Semaphore等,提高程序性能。 - **JVM调优**:掌握JVM的工作原理,学会分析JVM性能瓶颈,并进行有效的优化。 ### 架构师必备知识 - **...

    java 资源 笔记

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而著名。"Java资源笔记"可能涵盖了许多关于学习和理解Java的核心概念、语法、开发工具以及最佳实践。下面将对这些主题进行详细阐述。 1. *...

    java笔记大全

    - **线程同步和通信**:为了避免多线程并发访问共享资源导致的问题,需要使用synchronized关键字或wait()、notify()等方法进行线程间的同步和通信。 ### 实战案例分析 #### 10. Web开发 - **Servlet技术**:Java ...

    notebook-java:笔记本java示例

    4. **进阶主题**:可能涉及Java的高级特性,如反射、注解、Lambda表达式、流API(Java 8及以上版本)、并发编程等。 5. **实战项目**:一些实际问题的解决方案,可能是数据分析、机器学习模型的实现,或者是简单的...

    java-note-example:Java笔记示例

    并发编程是Java的一个强项。线程是并发执行的基本单元,Java提供了Thread类和Runnable接口来创建和管理线程。同步机制,如synchronized关键字、wait/notify机制和Lock接口,用于控制多线程间的协作,防止数据不一致...

    java 让初学者更清晰

    Java,作为一种广泛应用于全球的编程语言,以其...在学习过程中,结合"良葛格Java JDK 5.0学习笔记"这样的资料,深入实践,理论与实战相结合,才能更好地掌握Java编程,并为未来在软件工程领域的发展奠定坚实的基础。

    Java多线程文章系列.pdf

    - Java支持原生多线程,简化并发编程。 - **线程的管理**: - 线程调度策略。 - **线程的调度**: - 操作系统的线程调度机制。 - **信号标志**: - 用于保护共享资源。 - **死锁及其避免**: - 通过合理的锁策略...

    java多线程相关资料整理

    Java多线程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提高..."Java多线程源码笔记.pdf"这样的文档通常会涵盖以上内容,并可能包含具体的源码分析和实战案例,对于理解和掌握Java多线程编程非常有帮助。

    head_first_servlet&jsp学习笔记

    4. **线程安全**:属性管理需要考虑线程并发访问的问题,尤其是共享资源。 【会话状态管理】 1. **会话工作原理**:通过会话ID跟踪用户状态,常见于登录状态维持。 2. **会话超时**:若用户长时间无操作,会话会...

Global site tag (gtag.js) - Google Analytics