---------【Java并发】
皮皮的雅客
这个作者很懒,什么都没留下…
展开
-
CAS算法(CompareAndSwap)
困惑:刚开始学习并发编程的时候,总会听到一个词:CAS,经常会被其搞懵,不知道CAS到底是什么,用来干什么的,只知道糊里糊涂的理解,感觉懂一点,又感觉少了些什么。所以,为了能彻底搞懂这个玩意儿,写一篇学习笔记谈谈对CAS的理解。什么是CAS算法 CAS(CompareAndSwap, 比较并交换)算法其实是计算机硬件对于并发操作共享数据的支持,保证了数据的原子性。 其实...原创 2018-08-09 13:21:30 · 605 阅读 · 0 评论 -
Java并发包下的锁(4)——Condition接口
Condition 接口提供了类似Object的监视器方法,与Lock配合可以实现 等待/通知 模式文章目录Condition的接口Condition的实现1. 等待队列2. 等待3. 通知参考Condition的接口在说Condition的接口之前,先对比一下与Object监视器的异同:对比项Object的监视器(Monitor)Condition前置条件获...原创 2018-11-08 17:04:59 · 220 阅读 · 0 评论 -
Java并发包下的锁(3)——重入锁和读写锁
重入锁 ReentrantLock 和读写锁 ReentrantReadWriteLock 是两个使用很广泛的同步组件,本文将详细介绍这两种锁特性、用法以及个别方法的源码分析文章目录重入锁——ReentrantLock1. ReentrantLock的特性2. 重进入的实现3. 公平锁与非公平锁4. 如何选择 synchronized 和 ReentrantLock读写锁——Reentra...原创 2018-11-08 17:04:21 · 264 阅读 · 0 评论 -
Java并发包下的锁(2)——队列同步器
本文主要介绍队列同步器AbstractQueuedSynchronizer(AQS),简称同步器,它是用来构建锁或者其他同步组件的基础框架,它使用一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。文章目录同步器简介1. 什么是同步器?2. 同步器的API展示3. 自定义同步组件同步器的实现1. 同步队列2. 独占式同步状态获取与释放3. 独占式超时获取同步...原创 2018-11-06 17:26:40 · 581 阅读 · 0 评论 -
Java并发包下的锁(1)——Lock的体系结构
在JDK1.5之前,在协调共享对象的访问时可使用的机制只有synchronized和volatile,这就是我们所熟知的内置锁;在JDK1.5中,著名并发编程大师Doug Lea使用Java编写了一个并发编程框架(java.util.concurrent.* => JUC),提供了更多并发编程的高级手段。例如可以通过显示加锁以保证多线程编程的可靠性,这就是大名鼎鼎的 显示锁。本系列文章将...原创 2018-11-06 17:25:53 · 1348 阅读 · 0 评论 -
线程基础知识(2)
线程的优先级简介 现代操作系统基本采用分时的形式调度运行线程,操作系统会分出一个个的时间片,线程会分配到若干时间片,当线程的时间片用完之后就会发生线程调度,并等待下次分配。线程分配到的时间片的多少决定了线程使用处理器资源的多少,线程优先级就是决定线程需要分配多少处理器资源的线程属性。 在Java中,通过一个整型变量priority来控制优先级,优先级的范围为 1~10,默认的优先级是5:...原创 2018-10-19 18:05:33 · 180 阅读 · 0 评论 -
Java内存模型(1)——JMM
在学习Java并发编程中,了解Java内存模型对于我们去理解Java多线程编程是非常有帮助的,本文将对JMM进行一个大体介绍,让我们对JMM有一个大体的轮廓。硬件的内存模型 为了提高效率,充分利用计算机的能力,多任务处理已经成为现代计算机的必备功能。与软件级的并发类似,硬件级的并发也会出现并发访问问题。例如现在的计算机一般是多核计算的,而共享内存区域却只有一块,多处理器与内存之间的数据共...原创 2018-10-09 21:21:36 · 237 阅读 · 0 评论 -
Java内存模型(2)——happens-before
happens-before 原则 (先行发生原则)是JMM中最核心的概念,该原则阐述了操作之间的内存可见性。happens-before的诞生——完善的JMM Java语言是最早尝试提供内存模型的语言,这是简化多线程编程、保证程序可移植性的一个飞跃。早起类似C、C++等语言,并不存在内存模型的概念,其行为依赖于处理器本身的内存一致性模型,但不同的处理器差异很大,所以一段C++程序在处理...原创 2018-10-14 18:43:45 · 148 阅读 · 0 评论 -
深入理解 synchronized
在多线程并发编程中synchronized一直是元老级角色,被很多人称为重量级锁。但是,这都是JDK1.6之前的事了,随着JDK1.6对synchronized进行了各种优化之后,其性能得到了很大的提升,重量级只是部分情况了。synchronized 的实现原理synchronized实现同步的基础:Java中的每一个对象都可以作为锁。表现为以下3种形式:对于普通同步...原创 2018-08-16 23:35:33 · 410 阅读 · 0 评论 -
深入理解 volatile
volatile 是轻量级的synchronized,它在多处理开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。volatile 定义与实现原理 volatile的定义:Java编程...原创 2018-08-14 19:54:50 · 4676 阅读 · 0 评论 -
线程基础知识(1)
进程与线程什么是进程: 我们先看看比较官方的表述,进程是操作系统结构的基础,是一次程序的执行,是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。 其实关于进程的官方定义也是很好懂,但是我们都不太喜欢过于官方的东西,还是来点比较实在解释比较好。进程就是我们打开的一个个应用程序,每一个应用程序都有属于自己...原创 2018-08-09 13:22:42 · 158 阅读 · 0 评论 -
Java并发包下的阻塞队列
本文简要介绍一下什么是阻塞队列,Java并发包给我们提供的阻塞队列有哪些,以及怎么去简单使用文章目录阻塞队列 BlockingQueue1. 简单概念2. API介绍BlockingQueue的实现类——七大阻塞队列1. ArrayBlockingQueue2. LinkedBlockingQueue3. LinkedBlockingDeque4. PriorityBlockingQueu...原创 2018-11-17 18:03:23 · 354 阅读 · 0 评论