java并发编程
铁憨憨的学习记录
越努力,越幸运,加油
展开
-
Java并发:有关并行的两个重要定律
有关为什么要使用并行程序的问题前面已经进行了简单的探讨。总的来说,最重要的应该是处于两个目的。第一,为了获得更好的性能;第二,由于业务模型的需要,确实需要多个执行实体。在这里,我将更加关注第一种情况,也就是有关性能的问题。将串行程序改造为并发程序,一般来说可以提高程序的整体性能,但是究竟能提高多少,甚至说究竟是否真的可以提高,还是一个需要研究的问题。目前,主要有两个定律对这个问题进行解...转载 2020-01-02 17:24:09 · 350 阅读 · 0 评论 -
java并发:synchronized的实现原理与应用
前言:在多线程并发编程中synchronized一直是元老级角色,很多人都会称呼它为重量级锁。先来看下利用synchronized实现同步的基础:Java中的每一个对象都可以作为锁。具体表现 为以下3种形式。 ·对于普通同步方法,锁是当前实例对象。 ·对于静态同步方法,锁是当前类的Class对象。 ·对于同步方法块,锁是Synchoni...原创 2019-06-26 17:31:51 · 184 阅读 · 0 评论 -
java并发:无锁算法—CAS
概述CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术。CAS也是现在面试经常问的问题,本文将深入的介绍CAS的原理。案例介绍CAS之前,我们先来看一个例子。上面这个例子在volatile关键字详解文中用过,我们知道,运行完这段代码之后,并不会获得期望的结果,而且会发现每次运行程序,输出的结果都不一...转载 2019-06-26 11:25:36 · 296 阅读 · 0 评论 -
Java并发:Java内存模型(一)
概述 Java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰Java程序员,本系列将揭开Java内存模型神秘的面纱。本系列大致分为4个部分:Java内存模型的基础,主要介绍内存模型相关的基本概念; Java内存模型中的顺序一致性,主要介绍重排序与顺序一致性内存模型; 同步原语,主要介绍3个同步原语(synchronized、volatile和final)的内存语义及...原创 2019-06-27 11:36:22 · 207 阅读 · 0 评论 -
Java并发:Java内存模型(二)
接上一篇讲到了Java内存模型的基础 ,本篇接着来谈谈重排序 的问题2 .重排序 重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。 2.1 数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分为下列3种类型,如表3-4所示。 上面3种情况,...原创 2019-06-28 10:03:25 · 144 阅读 · 0 评论 -
Java并发:Java内存模型(三)
接上一篇讲到了重排序和顺序一致性的问题,这里继续4.volatile的内存语义 当声明共享变量为volatile后,对这个变量的读/写将会很特别。为了揭开volatile的神秘面纱,下面将介绍volatile的内存语义及volatile内存语义的实现。 4.1 volatile的特性 理解volatile特性的一个好方法是把对volatile变量...原创 2019-06-28 10:53:07 · 125 阅读 · 0 评论 -
Java并发:Java内存模型(四)
这里接着讲锁的内存语义5.锁的内存语义 众所周知,锁可以让临界区互斥执行。这里将介绍锁的另一个同样重要,但常常被忽视的功能:锁的内存语义。 5.1锁的释放和获取的内存语义 当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中。以上面的MonitorExample程序为例,A线程释放锁后,共享数据的状态示意图如图3-25所示。 ...原创 2019-06-29 18:16:46 · 173 阅读 · 0 评论 -
Java并发:Java并发编程基础
概述: Java从诞生开始就明智地选择了内置对多线程的支持,这使得Java语言相比同一时期的其他语言具有明显的优势。线程作为操作系统调度的最小单元,多个线程能够同时执行,这将显著提升程序性能,在多核环境中表现得更加明显。但是,过多地创建线程和对线程的不当管理也容易造成问题。1、 线程简介 1.1 什么是线程 现代操作系统在运行一个程序时,会为其...原创 2019-06-29 20:48:13 · 112 阅读 · 0 评论