并发编程
文章平均质量分 95
并发编程
天明少侠
这个作者很懒,什么都没留下…
展开
-
读写锁ReadWriteLock和ReentrantReadWriteLock
接口依赖图ReentrantReadWriteLock的接口依赖图概述Java并发编程包提供了读写锁的实现,其维护了一对相关的锁 ,即 “读取锁”和“写入锁”,一个用于读取操作,另一个用于写入操作。 “读取锁”用于只读操作,它是“共享锁”,能同时被多个线程获取。 “写入锁”用于写入操作,它是“独占锁”,写入锁只能被一个线程锁获取。所谓读写锁,是对访问资源共享锁和...原创 2018-04-18 22:48:46 · 523 阅读 · 0 评论 -
为什么要用线程池?
线程池的基本思想 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。 在系统中开辟一块区域,存放一些待命的线程,这个区域成为线程池。 如果有需要执行的任务,则从线程池中借一个待命的线程来执行指定的任务,任务执行结束在将借的线程归还,这样就避免了大量创建线程对象,浪费CPU、内存资源的问题。 合理利用线程池能够带来三个好处...原创 2018-04-10 09:08:04 · 841 阅读 · 0 评论 -
Thread源码解析
笔记synchronized可以在任意对象或方法上加锁,而加锁的这段代码称为“互斥区”或“临界区”。非线程安全主要是指多个线程对同一个对象中的同一个实例变量进行操作时会出现值被更改、值不同步的情况,进而影响程序的执行流程。源码解析构造函数 public Thread() { init(null, null, "Thread-"原创 2018-07-07 17:43:07 · 829 阅读 · 0 评论 -
CAS无锁算法
乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的实际应用。先说概念。对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。Java中,synchronized关键字和Lock的实现类都是悲观锁。而乐观锁认为自己在使用数据时不会有别的线程...原创 2018-12-15 20:52:44 · 258 阅读 · 0 评论 -
轻量级同步机制volatile
在Java多线程编程当中,提供了以下几种方式来实现线程安全内部锁(Synchronized)和显式锁(Lock):属于互斥同步方法,是重量级的多线程同步机制,可能会引起上下文切换和线程调度,它同时提供内存可见性、有序性和原子性。volatile:轻量级多线程同步机制,不会引起上下文切换和线程调度。仅提供内存可见性、有序性保证,不提供原子性。CAS原子指令:属于非阻塞同步方法,轻量级多线程同步...原创 2018-12-09 19:52:28 · 397 阅读 · 0 评论 -
Thread常用方法解析
常用方法 java.lang.Threadpublic static native Thread currentThread(); 返回对当前正在执行的线程对象的引用。 public long getId()返回该线程的标识符。 public final String getName()返回该线程的名称。 public final int getPriority()返回线程的优...原创 2018-04-15 22:37:37 · 376 阅读 · 0 评论 -
可重入锁-ReentrantLock
此篇博客所有源码均来自JDK 1.8ReentrantLock,可重入锁,是一种递归无阻塞的同步机制。它可以等同于synchronized的使用,但是ReentrantLock提供了比synchronized更强大、灵活的锁机制,可以减少死锁发生的概率。 API介绍如下: 一个可重入的互斥锁定 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视...原创 2018-04-12 22:24:24 · 319 阅读 · 0 评论 -
Semaphore源码解析
Semaphore继承关系 实现了Serializable 接口,同时含有一个私有Sync对象字段public class Semaphore implements java.io.Serializable { private static final long serialVersionUID = -3222578661600680210L; /** All mec...原创 2018-05-30 20:13:30 · 222 阅读 · 0 评论 -
原子类AtomicInteger
介绍 AtomicInteger是一个提供原子操作的Integer类,通过线程安全的方式操作加减。实现原理 AtomicInteger简单来说就是一个能进行原子操作的Integer,这样在多线程操作下对AtomicInteger的操作是原子操作的,操作后的值对所有线程都是立即可见的。 简单来说其实现就是使用的volatile变量 value和sun.mi...原创 2018-04-23 20:56:41 · 602 阅读 · 0 评论 -
并发工具类CountDownLatch源码分析
源码如下:public class CountDownLatch { /** * Synchronization control For CountDownLatch. * Uses AQS state to represent count. */ private static final class Sync extends Abstract...原创 2018-05-19 18:13:15 · 282 阅读 · 0 评论 -
Java并发编程系列之Lock与synchronized
Lock与synchronized 的区别1、lock是可中断锁,支持中断处理,而synchronized 不是可中断锁 线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定, 如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断 如果使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待...原创 2018-04-11 22:43:14 · 284 阅读 · 0 评论 -
AQS简介
AQS,AbstractQueuedSynchronizer,即队列同步器。 AQS功能可以分为两类:独占锁和共享锁。它是构建锁或者其他同步组件的基础框架(如ReentrantLock、ReentrantReadWriteLock、Semaphore等),JUC并发包的作者(Doug Lea)期望它能够成为实现大部分同步需求的基础。它是JUC并发包中的核心基础组件。AQS解决...原创 2018-05-04 14:21:25 · 563 阅读 · 0 评论 -
JAVA自定义线程池
自定义线程池ThreadPoolExecutor的构造函数有7个参数源码public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueu.原创 2019-08-01 20:40:07 · 2267 阅读 · 0 评论