Java并发编程学习
学习Java并发编程的笔记
阿星小天地
邮箱:vincezon@126.com
博客园:https://www.cnblogs.com/vincezon
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JUC:公平锁、非公平锁、共享锁、独占锁、可重入锁、自旋锁、死锁、死锁排查方法
文章目录各种锁的理解1、公平锁、非公平锁2、共享锁、独占锁3、可重入锁4、自旋锁自定义简单的锁5、死锁死锁排查 jps关于进程、线程、并发、并行的问题各种锁的理解1、公平锁、非公平锁公平锁:非常公平,任何线程获得公平锁,那么就会执行锁中业务直到结束,过程中任何进程都不得干预打扰。不能插队。非公平锁:在获得非公平锁之后,执行代码过程中,其他线程可以插入执行,该线程暂停执行,等待其他线程执行完毕,才可继续执行。可插队。(默认非公平锁)2、共享锁、独占锁共享锁:就是读取锁里的读锁,进行读操作,任原创 2020-06-14 17:40:13 · 500 阅读 · 0 评论 -
JUC:AQS介绍、AQS原理、AQS底层用模板方法模式、定义两种资源共享方式
AQSAQS介绍java.util.concurrent.locks 包中的 AbstractQueuedSynchronizer (抽象队列同步器)类该类是用于构建锁和同步器的框架。 使用该类可以简单且高效的构造出应用广泛的同步器,比如:ReentrantLock, Semaphore, ReentrantReadWriteLock, FutureTask等。同样我们也能继承该类,去实现自己需求的同步器。AQS原理AQS核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程归为有效工.原创 2020-06-14 17:35:49 · 622 阅读 · 0 评论 -
JUC:理解CAS、CAS会出现的ABA问题、解决ABA原子引用、使用Synchronized会比CAS操作慢效率低
文章目录深入理解CAS JDK1.5CAS会出现ABA问题解决ABA 原子引用- AtomicStampedReference遇到的坑CAS实现原子操作3大问题使用synchronized会比CAS操作慢和效率低深入理解CAS JDK1.5在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令。 它将内存位置的内容与期望值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。 这是作为单个原子操作完成的。 原子性保证新值基于最新信息计算; 如果该值在原创 2020-06-14 17:32:13 · 737 阅读 · 0 评论 -
JUC单例模式:饿汉式、懒汉式、DCL懒汉式、静态内部类、枚举
文章目录单例模式1、饿汉式2、懒汉式3、DCL懒汉式通过反射破坏单实例第1种第2种4、静态内部类5、枚举尝试反射获取枚举实例第一种尝试第二种尝试总结单例模式单例模式,即单个实例,只有一个实例1、饿汉式饿汉模式,可以想象一个很饿的人,需要立马吃东西,饿汉模式便是这样,在类加载时就创建对象,由于在类加载时就创建单例,因此不存在线程安全问题。反射可破坏。public class HungryDemon { private static final HungryDemon hungry = n原创 2020-06-14 17:16:32 · 488 阅读 · 0 评论 -
JUC:JMM内存模型理解、Volatile关键字的理解
文章目录JMM(java memory model)Volatile 关键字保证可见性volatile++复合操作不保证原子性单个volatile操作保证原子性禁止指令重排JMM(java memory model)什么是JMMJMM:java内存模型(java memory model)。可理解为一种概念、约定。因为在不同的硬件生产商和不同的操作系统下,内存的访问逻辑有一定的差异,结果就是当你的代码在某个系统环境下运行良好,并且线程安全,但是换了个系统就出现各种问题。Java内存模型,就是为了原创 2020-06-14 17:11:40 · 295 阅读 · 0 评论 -
JUC:ForkJoinPool类的理解与应用、CompletableFuture类的理解与应用
文章目录ForkJoinPool类 JDK 1.7常用方法ForkJoinTask\ 抽象类RecursiveAction 抽象类RecursiveTask\ 抽象类LongStream 接口案例 使用ForkJoin,并行Stream计算大数据的和CompletableFuture\类 异步回调 JDK1.8构造方法常用方法ForkJoinPool类 JDK 1.7ForkJoin 并发执行任务,提高效率,在大数据量表现显著。最适合的是计算密集型的任务。ForkJoin工作原理是将大量的数据分原创 2020-06-14 17:07:26 · 1230 阅读 · 0 评论 -
JUC线程池:3大方、7大参数、4种拒绝策略、CPU密集型、IO密集型、混合型、线程池最大线程数确定
文章目录线程池1、3大方法2、7大参数ThreadPoolExecutor 类执行过程原理3、4种拒绝4、自定义线程池CPU密集型 IO密集性 混合型线程池最大线程数应该如何定义?线程池3大方法、7大参数、4种拒绝 自定义线程池1、3大方法不推荐使用该3大方法,请使用ThreadPoolExecutor创建线程池Executors.newSingleThreadExecutor() 单个线程Executors.newFixedThreadPool(int num) 固定数线程的线程池Ex原创 2020-06-14 17:03:14 · 732 阅读 · 0 评论 -
JUC常用工具、CountDownLatch、CyclicBarrier、Semaphore、Exchanger、常用方法
文章目录JUC常用工具(组件)类 JDK 1.51、CountDownLatch构造方法常用方法2、CyclicBarrier构造方法常用方法3、Semaphore构造方法常用方法4、Exchanger- CountDownLatch 与 CyclicBarrier 的区别JUC常用工具(组件)类 JDK 1.5都实现了AQS类1、CountDownLatchjava.util.concurrent.CountDownLatch 类,是一个减计数器构造方法public CountDownL原创 2020-06-14 16:53:23 · 192 阅读 · 0 评论 -
JUC:Lock接口、ReentrantLock类、Lock与Synchronized的区别、解决虚假唤醒、Condition接口、解决集合类线程不安全、Callable、FutrueTask
文章目录Lock 接口 (重点)1、ReentrantLock 类2、Lock与Synchronized的区别 面试3、防止线程虚假唤醒解决虚假唤醒分析 面试4、Condition 接口 JDK 1.55、Condition实现精准通知唤醒6、关于锁的问题 面试解决集合类线程不安全解决集合同步解决并发几个方法的区别Callable 进阶 FutureTaskLock 接口 (重点)常用传教Lock的方法:Lock lock = new ReentrantLock()1、ReentrantLock原创 2020-06-14 16:49:53 · 408 阅读 · 0 评论 -
JUC 自定义至多有2个线程获取同步状态的同步组件TwinsLock
自定义同步组件 TwinsLockTwinsLock.java自定义简单的同步组件,该工具至多只允许2个线程同时访问,超过2个线程的访问将被阻塞,加入到同步队列中,这个自定义规则的工具为TwinsLock。由于允许2个线程同时获取同步锁,所以该同步组件是共享的。通俗的说:AQS是写同步的规则,而Lock接口是AQS的代理者,用Lock接口的实现方法去调用AQS的方法实现同步。AQS面向写...原创 2020-05-01 13:27:25 · 364 阅读 · 0 评论
分享