`

java并发浅析第一篇

 
阅读更多

 

1.java 内存模型,其实管理java内存模型和os操作内存可以类比。

   java里面工作内存其实就是栈,主内存就是堆。

  操作系统中存在可见性问题,解决方案即缓存一致性,比如两个cpu共同加载了一个内存块,A进行读,B进行写,则B会发送一个写广播,在cpu间进行通信,此时写的优先级会大于读的优先级,所以A收到写广播,会将缓存中的变量置为失效,重新从内存中加载该变量。

  那么java线程之间同样存在可见性问题,线程A读取变量value,线程B写变量value,线程B写的变量不一定会立刻同步到主存,线程A读取变量不一定会从主存中读取变量。



 

2.java存在哪些并发问题?

   一.指令重排序问题,重排序并不意味着所有程序都是杂乱无章的,重排序只是重排序没有相互依赖的代码。比如构造器中创建对象,但是在还没有初始化完成变量之前就已经return了。

   二.非volatile的64位变量赋值,其它线程可能读取到的是没有操作完成的半个变量

   三.读取到的数据已经失效,已经被其它线程修改了。

 

3.java并发有哪些解决方案?

  一.第一个问题在某些情况下可以使用定义final变量,使指令重排序失效,JMM内存模型要求final类型的变量的初始化动作必须在return之前完成。

  二.第二个问题当然就是指定volatile。后面单独讨论下volatile。

  三.进行加锁的动作

  四.ThreadLocal定义线程内的变量。

 

  • 大小: 40.8 KB
0
0
分享到:
评论

相关推荐

    java nio 原理浅析

    Java NIO(非阻塞I/O)是一种在Java中实现高效I/O操作的方式,相比于传统的BIO(阻塞I/O),NIO具有更好的性能和更低的资源消耗,特别是在高并发和大数据传输的场景下。Netty是基于Java NIO的一个高性能、异步事件...

    高性能高并发服务器架构大全

     如何规划您的大型JAVA多并发服务器程序 139  如何架构一个“Just so so”的网站? 148  最便宜的高负载网站架构 152  负载均衡技术全攻略 154  海量数据处理分析 164  一个很有意义的SQL的优化...

    浅析java中遍历map的两种方式

    然而,由于涉及到两次查找(一次获取键,一次获取值),在性能上可能略逊于第一种方法。 总结: 遍历Map时,选择哪种方式取决于具体需求。如果需要同时访问键和值,并且可能修改键值对,使用`entrySet()`更合适。...

    浅析J2EE的三层结构优点

    随着信息技术的不断发展,企业级应用程序的需求日益增长,而Java Enterprise Edition (J2EE)作为一种成熟的企业级开发平台,凭借其强大的功能和灵活性,在众多开发框架中脱颖而出。其中,J2EE的三层架构模式是其成功...

    浅析Redis分布式锁

    第一版本的实现使用`set`和`del`命令来获取和释放锁。然而,这种方法存在线程安全问题,因为`set`操作在高并发环境下可能导致数据不一致,从而无法保证锁的正确性。 第二版本尝试通过`increment`操作来实现锁抢占,...

    sesvc.exe 阿萨德

    本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。 HashMap 众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk...

    CSDN开发高手03-09

    #### 中国大陆反外挂第一人林阜民 林阜民是反外挂领域的专家,他的工作重点在于研究和实施有效的反作弊策略。《游戏反外挂的法律维权和未来发展》可能是他关于如何利用法律手段保护游戏开发商权益的观点。 ### 4. ...

    代码之美(中文完整版).pdf

    第1章 正则表达式匹配器 。 1.1 编程实践 1.2 实现 1.3 讨论 1.4 其他的方法 1.5 构建 1.6 小结 第2章 Subversion中的增量编辑器:像本体一样的接口 2.1 版本控制与目录树的转换 2.2 表达目录树的差异 2.3 增量编辑...

    python 2019毕业论文参考文献.docx

    - **知识点概述**:王常衡等人的文章《浅析Python语言及其应用前景》(2019)探讨了Python作为一种流行的编程语言,在不同领域的应用潜力和发展趋势。 - **详细内容**:文章分析了Python语言的基本特性和优势,如...

    WebRTC零基础开发者教程

    - **概述:** Eclipse 是一个开源的 IDE,广泛应用于 Java 开发,但同样支持 C++。 - **配置 WebRTC 项目:** - 安装 Eclipse CDT 插件。 - 下载 WebRTC 源码。 - 使用 Eclipse 导入项目。 #### 二、Webrtc **...

Global site tag (gtag.js) - Google Analytics