java并发编程
文章平均质量分 92
哈哈怪笑死人
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
一文帮你清理:如何正确的停止线程!
如何正确的停止线程?一个线程一般都是正常的运行直到执行任务完毕而结束。那什么时候我们需要对线程进行停止的动作呢?例如用户行为的一个取消动作,运行超时或者运行过程中出现错误也是需要停止当前线程,应用程序需要进行重启等都需要我们主动的停止正在运行的线程,如何安全可靠的停止线程并不是一件简单的事情。java语言并没有一种机制可以安全可靠的去停止一个线程,但是提供了一个中断(interrupt)机制...原创 2020-03-24 22:41:55 · 342 阅读 · 0 评论 -
死锁分析以及检测工具详解
锁的状态死锁:线程1等待线程2的互斥持有资源,而线程2等着线程1的互斥持有资源,两个线程都无法进行执行。活锁:线程持续重试一个总是失败的操作,导致无法继续执行。(不是本文的重点)饿死:线程一直被调度器延迟访问其赖以执行的资源,也许是调度器先于低优先级的线程而执行高优先级的线程,同时总是会有一个高优先级的线程可以执行,饿死也叫做无限延迟。死锁的案例代码如下所示:package ...原创 2020-02-11 18:24:56 · 921 阅读 · 0 评论 -
JIT对锁的优化- 锁消除和锁粗化案例分析
锁消除和锁粗化案例分析锁消除直接上代码/** * 描述: 锁粒度演示 * @author karl * @create 2020-02-11 14:38 */public class MySynchronizedTest07 { private Object object = new Object(); public void method() { ...原创 2020-02-11 15:26:23 · 548 阅读 · 0 评论 -
synchronized锁升级详解
synchronized锁升级在JDK1.5之前,我们要想实现线程同步,只能通过synchronized关键字这一种方式达成。synchronized关键字是JVM实现的一种内置锁。从底层角度来说,这种锁释放和获取都是jVM帮我们隐式实现的。从JDK1.5开始并发包引入了Lock锁,Lock锁是基于Java实现的。因此锁的获取和释放都是由java代码实现的。然而synchronized是基于...原创 2020-02-09 14:20:47 · 1269 阅读 · 0 评论 -
通过openjdk源码ObjectMonitor底层实现分析wait/notify
通过openjdk源码分析ObjectMonitor底层实现Hotspot JDK只是部分开源,将底层的调用C++的native方法的具体实现屏蔽了,而openjdk则将这部分也开源了,接下来我们通过openjdk源码分析ObjectMonitor底层实现。openjdk 的官方地址为: https://openjdk.java.net/源码地址: https://hg.openjdk.j...原创 2020-02-07 16:57:53 · 1445 阅读 · 1 评论 -
如何使用CountDownLatch实现多线程的同步
如何使用CountDownLatch实现多线程的同步业务需求一个整体的业务可以分为三个执行逻辑 业务A 业务B和业务C,业务A,B直接没有关联,业务C一定要等业务A和B执行完毕后执行。图解说明如下图代码案例 public static void main(String[] args) throws InterruptedException { //创建线程池 ...原创 2019-05-17 22:40:08 · 807 阅读 · 0 评论 -
java如何解决可见性和有序性问题?--学习笔记
java如何解决可见性和有序性问题?我们通过文章(https://blog.youkuaiyun.com/qq_33249725/article/details/89482779)可知:Cpu缓存导致可见性问题,编译器优化导致有序性问题,我们能直接联想到的解决方法就是禁用Cpu缓存和编译器优化,但是这样程序的执行效率就会很低,我们可以自定义的去禁用吗?接下来就就是我们的Java内存模型。java内存...原创 2019-04-30 22:43:01 · 620 阅读 · 0 评论 -
并发编程中不可不提的三大特性:可见性 原子性 和 有序性 - 学习笔记
可见性 原子性 和 有序性 - 学习笔记概述要想了解并发编程的原理,我们首先要对操作系统相关的知识有所了解。操作系统主要包括Cpu,内存,I/O,三者的速度差异是非常大的。CPU 是天上一天,内存是地上一年,内存和 I/O 设备的速度差异就更大了,内存是天上一天,I/O 设备是地上十年。我们大部分程序都需要访问内存或者操作I/O,要想提高我们的程序效率单纯的优化某一点是不可取的。为此操作...原创 2019-04-23 22:28:28 · 330 阅读 · 0 评论 -
线程池创建多少线程比较合理?
线程池创建多少线程比较合理?在设置线程池线程个数的时候,经常会想到这个问题,是不是设置的线程数越多越好?理解这个问题之前我们要先清楚的知道我们为什么使用多线程。为什么会使用多线程使用多线程的主要目的我们应该都能回答的出来就是提高程序的性能,这个提高性能其实是指,降低延迟 指发送请求到接收到数据的时间,和 提搞吞吐量:单位时间能可以处理更多的请求。将近延迟和提高吞吐量对应的方法有两种:...原创 2019-04-09 22:59:41 · 2039 阅读 · 0 评论 -
java内存模型
概述本人最近在极客时间(https://time.geekbang.org/column/article/84017) 上看java并发的东西,其中有一个大佬留言印象深刻,并记录下来和大家一起分享一下。相信又有助于大家都java并发的了解。为什么要定义java内存模型现代计算机体系大部是采用的对称多处理器的体系架构。每个处理器均有独立的寄存器组和缓存,多个处理器可同时执行同一进程中的不...转载 2019-03-19 19:25:37 · 139 阅读 · 0 评论
分享