并发编程
沉梦昂志1995
沉梦昂志
展开
-
Java并发学习(一)并发机制底层实现原理,线程安全、线程同步与synchronized关键字
什么是线程安全当多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替运行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获取正确的结果,那这个对象是线程安全的。什么是线程同步当多个线程同时读写同一份共享资源的时候,可能会引起冲突。这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一团。同步...原创 2019-08-08 21:27:45 · 552 阅读 · 1 评论 -
Java并发学习(五)锁的分类
一、Java中的锁(一)锁的分类公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁锁是用来控制多个线程访问共享资源的方式上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释。先对Java中的锁有个初步的概念。公平锁/非公平锁公...转载 2019-08-08 15:51:27 · 111 阅读 · 0 评论 -
Java并发学习(八)并发工具类与原子操作类
并发工具类 在Java并发包中提供了很多有用的并发工具类,并发工具类可以使任何一种对象,只要该对象可以根据自身的状态来协调控制线程的控制流。阻塞队列可以作为同步工具类,其他类型的同步工具类还包括:信号量(Semaphore)、栅栏(Barrier)、闭锁(Latch)等。闭锁闭锁是一种同步工具类,可以延迟线程的进度直到其达到终止状态。闭锁作用相当于一扇门:在闭锁到达某一状态之...原创 2019-08-19 19:09:25 · 205 阅读 · 0 评论 -
Java并发学习(二)Java内存模型与happens-before原则
在并发编程中分析线程安全的问题时往往需要切入点,本文主要围绕两大核心:JMM抽象内存模型以及happens-before规则,三条性质:原子性,有序性和可见性目录Java内存模型概述Java内存模型Java内存模型与硬件内存架构1、硬件内存架构2、JVM对线程的实现3、Java内存模型与硬件内存架构的映射JMM执行内存交互情况原子性、可见性和有序性...原创 2019-08-10 22:54:49 · 289 阅读 · 0 评论 -
Java并发学习(三)Java线程的实现原理
进程与线程进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。线...原创 2019-08-10 15:35:55 · 341 阅读 · 0 评论 -
Java并发学习(九)任务执行、线程池及并发框架
大多数并发应用程序都是围绕“任务执行(Task Execution)”来构造的:任务通常是一些抽象且离散的工作单元。把应用程序分配到多个任务中,可以简化程序的组织结构,提高任务的执行效率。任务执行在围绕“任务执行”进行程序设计时,首先应该确定清晰的任务边界,在理想情况下,各个任务的边界是相互独立的,任务并不依赖于其他任务的状态或结果,那么这些相互独立的任务单元就是可以并行执行的。...原创 2019-08-20 21:15:28 · 471 阅读 · 0 评论 -
Java并发学习(四)显式锁Lock与AQS队列同步器
在Java5之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile,Java5之后增加了新的机制显式锁Lock,所以我们可以使用锁(显式锁)而不是隐式锁(同步)来线程安全地编程;和隐式锁相比,显示锁更加的灵活,但这不代表隐式锁是来替代synchronized隐式内置锁的,而是当内置锁不适用时,作为一种高级功能。Lock接口前面的学习中我们已经了解...原创 2019-08-16 10:52:53 · 257 阅读 · 1 评论 -
Java并发学习(六)显式锁的实现,重入锁ReentrantLock、读写锁ReentrantReadWriteLock
上次对于显示锁和队列同步器的学习已经提到,我们可以使用Java提供的队列同步器AQS实现自定义的同步组件。同样,Java自身也为我们提供了很多可用的锁(或同步组件),如重入锁ReentrantLock和读写锁ReentrantReadWriteLock等,它们也是通过AQS实现的,并且继承了Lock接口。与内置锁synchronized不同,Lock接口提供了一种无条件的、可轮询的、定时的以及...原创 2019-08-17 19:33:45 · 168 阅读 · 0 评论 -
Java并发学习(七)并发容器
Java平台类库包含了大量的并发基础构建模块,包括线程安全的容器类以及各种用于协调多个相互协作的线程控制流的同步工具类(Synchronizer),学习这些基础模块不仅能提高并发编程的能力,更可以从中看到Doug Lea等大师的设计思想。同步容器类 同步容器类包括Vector、Hashtable以及它们的子类,还有通过Collections.synchronizedXxx的一些工...原创 2019-08-18 22:26:19 · 462 阅读 · 0 评论