随笔分类 -  Java并发

摘要:为了方便记忆,将锁做如下的分类 一、对象锁 包括方法锁(默认锁对象为this,当前实例对象)和同步代码块锁(自己指定锁对象) 1.代码块形式:手动指定锁定对象,也可是是this,也可以是自定义的锁 public class SynchronizedObjectLock implements Runn 阅读全文
posted @ 2020-03-01 15:53 朱子威 阅读(625) 评论(0) 推荐(0)
摘要:前言 我们知道volatile关键字的作用是保证变量在多线程之间的可见性,它是java.util.concurrent包的核心,没有volatile就没有这么多的并发类给我们使用。 本文详细解读一下volatile关键字如何保证变量在多线程之间的可见性,在此之前,有必要讲解一下CPU缓存的相关知识, 阅读全文
posted @ 2020-01-07 16:48 朱子威 阅读(575) 评论(0) 推荐(0)
摘要:二、ObjectMonitor 结构 前面讲到 java.lang.Object 类定义了 wait(),notify(),notifyAll() 方法。 这些都是 native方法,底层是C++来实现的。 这些方法的具体实现,依赖一个叫做ObjectMonitor模式实现,这是JVM内部C++实现 阅读全文
posted @ 2019-12-31 10:20 朱子威 阅读(6345) 评论(2) 推荐(1)
摘要:实现原理 synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性 Java中每一个对象都可以作为锁,这是synchronized实现同步的基础: 普通同步方法,锁是当前实例对象 静态同步方法,锁是当前类的class对象 同步 阅读全文
posted @ 2019-12-31 09:55 朱子威 阅读(1415) 评论(0) 推荐(0)
摘要:1.并发编程领域的关键问题 1.1 线程之间的通信 线程的通信是指线程之间以何种机制来交换信息。在编程中,线程之间的通信机制有两种,共享内存和消息传递。 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信,典型的共享内存通信方式就是通过共享对象进行通 阅读全文
posted @ 2019-12-24 16:32 朱子威 阅读(611) 评论(0) 推荐(0)
摘要:https://blog.csdn.net/luluyo/article/details/92403240 https://blog.csdn.net/luluyo/article/details/95517610 https://blog.csdn.net/anhenzhufeng/article 阅读全文
posted @ 2019-12-15 19:58 朱子威 阅读(135) 评论(0) 推荐(0)
摘要:使用解析: https://cloud.tencent.com/developer/article/1038499 公平锁与非公平锁的区别: https://blog.csdn.net/m47838704/article/details/80013056 阅读全文
posted @ 2019-11-27 09:58 朱子威 阅读(162) 评论(0) 推荐(0)
摘要:concurrent包是基于AQS (AbstractQueuedSynchronizer)框架的,AQS框架借助于两个类: Unsafe(提供CAS操作) LockSupport(提供park/unpark操作) 因此,LockSupport非常重要。 两个重点 (1)操作对象 归根结底,Lock 阅读全文
posted @ 2019-11-26 17:55 朱子威 阅读(3459) 评论(0) 推荐(0)
摘要:状态转换图如上 阅读全文
posted @ 2019-11-26 16:44 朱子威 阅读(174) 评论(0) 推荐(0)
摘要:Node节点状态源码解析:https://www.cnblogs.com/fsmly/p/11274572.html 流程解析:https://www.cnblogs.com/waterystone/p/4920797.html condition源码解析:https://www.jianshu.c 阅读全文
posted @ 2019-11-25 20:49 朱子威 阅读(154) 评论(0) 推荐(0)
摘要:ForkJoin框架之ForkJoinTask java 阅读约 62 分钟 前言 在前面的文章"CompletableFuture和响应式编程"中提到了ForkJoinTask和ForkJoinPool,后者毫无疑问是一个线程池,前者则是一个类似FutureTask经典定义的概念. 官方有一个非常 阅读全文
posted @ 2019-11-25 20:39 朱子威 阅读(1044) 评论(0) 推荐(0)
摘要:本文的主要目的是介绍 ForkJoinPool 的适用场景,实现原理,以及示例代码。 说在前面可以说是说明,也可以说下面是结论: ForkJoinPool 不是为了替代 ExecutorService,而是它的补充,在某些应用场景下性能比 ExecutorService 更好。ForkJoinPoo 阅读全文
posted @ 2019-11-25 20:32 朱子威 阅读(6394) 评论(0) 推荐(0)
摘要:类图如下: Executors创建线程池的方式 根据返回的对象类型创建线程池可以分为三类: 创建返回ThreadPoolExecutor对象 创建返回ScheduleThreadPoolExecutor对象 创建返回ForkJoinPool对象 本文只讨论创建返回ThreadPoolExecutor 阅读全文
posted @ 2019-11-25 14:39 朱子威 阅读(1174) 评论(0) 推荐(0)
摘要:一、线程池简介 线程池的使用主要是解决两个问题:①当执行大量异步任务的时候线程池能够提供更好的性能,在不使用线程池时候,每当需要执行异步任务的时候直接new一个线程来运行的话,线程的创建和销毁都是需要开销的。而线程池中的线程是可复用的,不需要每次执行异步任务的时候重新创建和销毁线程;②线程池提供一种 阅读全文
posted @ 2019-11-25 13:46 朱子威 阅读(1595) 评论(0) 推荐(0)
摘要:1、线程池的使用场景 等待返回任务的结果的多步骤的处理场景, 批量并发执行任务,总耗时是单个步骤耗时最长的那个,提供整体的执行效率, 最终一致性,异步执行任务,无需等待,快速返回 2、线程池的关键参数说明 一般情况下我们是通过ThreadPoolExecutor来构造我们的线程池对象的。 * 阿里巴 阅读全文
posted @ 2019-11-25 11:32 朱子威 阅读(2447) 评论(0) 推荐(0)
摘要:异步与多线程的区别 一、异步和多线程有什么区别?其实,异步是目的,而多 线程是实现这个目的的方法。异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作 就没有必要异步了),可以继续自顾自的处理它自己的事儿,不用干等着这个耗时操作返回。.Net中的这种异步编程模型,就简化了多线程编程, 阅读全文
posted @ 2019-03-28 11:27 朱子威 阅读(4128) 评论(0) 推荐(1)
摘要:BIO、NIO和AIO的区别(简明版) 同步异步,阻塞非阻塞; https://www.zhihu.com/question/19732473 转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6543960.html 一:事件分离器 在IO读写时,把 IO请求 阅读全文
posted @ 2018-09-26 14:09 朱子威 阅读(215) 评论(0) 推荐(0)