
多线程
多线程内容笔记
a little funny
java开发,一个有意思的程序员。
展开
-
记一次写框架的心路历程
背景周五的时候,我的主管把我叫过去说有一个需求很急,采用传统的开发模式可能来不及,他说他打算开发一个框架来快速集成,当然把我叫过去的目的是和他一起开发,他给我的任务是,让我开发一个轻量级的mybatis,大致要求如下两点:不要xml文件要有缓存老实讲我之前是没有开发过框架的,并且mybatis我虽然用的是很溜,但是源码我确实没有看过,而且只有一天时间,难度对我来说是挺大的。于是我继续和我的老大沟通,他具体是要干什么,他说就是能执行sql就好,突然一道灵光乍现,既然这样我们用JDBC不就好了,老原创 2020-06-08 00:23:35 · 265 阅读 · 0 评论 -
锁降级
前言上篇文章写了synchronized的锁升级,本文主要来写下java中的锁降级,其实在很多书中和博客里的观点都是没有锁降级这一说的,但是java中确实有锁降级的场景。锁降级锁降级发生在读写锁中,写锁降级读锁的过程。读写锁ReentrantReadWriteLock读写锁,既可以获取读锁,也可以获取写锁需要明确的是:写锁是独占锁,所谓独占即为独自占有,别的线程既不能获取到该...原创 2020-05-05 16:13:25 · 615 阅读 · 0 评论 -
synchronized锁升级及demo验证
synchronized锁我们都知道在jdk 1.5时,synchronized锁是一个重量级锁,缺点如下:每次获取和释放锁都会带来用户态和内核态的切换,从而增加系统的性能开销 在锁竞争激烈的情况下,synchronized同步锁的性能很糟糕在JDK 1.5,在单线程重复申请锁的情况下,synchronized锁性能要比Lock的性能差很多在jdk 1.6时对synchronized进...原创 2020-04-19 22:37:25 · 161 阅读 · 0 评论 -
线程通信的四种方式
线程之间为什么要通信?通信的目的是为了更好的协作,线程无论是交替式执行,还是接力式执行,都需要进行通信告知。那么java线程是如何通信的呢,大致有以下四种方式。Java线程的通信方式volatile等待/通知机制join方式threadLocalvolatile关键字方式volatile有两大特性,一是可见性,二是有序性,禁止指令重排序,其中可见性就是可以让线程之间进行通信。...原创 2020-04-12 23:34:20 · 3565 阅读 · 0 评论 -
double-check的单例模式安全吗?
今天是清明长假的第二天,清明也是国内疫情好转的首个假期,因为疫情在家憋坏了的小可爱们也是撒了欢的想往外跑,恰值风和日丽,邀三五好友爬山郊游,作为以记之。跟着小姐姐去爬山上山乱入别的户外社团,大概是看社团小姐姐比较多山路再险也难不住环岛小马哥路上的野花相比粉的,我更爱这娇艳艳的红色山脚风景山腰风景...原创 2020-04-08 23:30:36 · 559 阅读 · 0 评论 -
线程池参数调优
ThreadPoolExecutorThreadPoolExecutor构造函数的五大参数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ...原创 2020-03-29 18:00:24 · 1589 阅读 · 0 评论 -
手写AQS锁解决秒杀超卖
业务场景电商活动的秒杀场景,在并发过来的时候很容易出现库存扣超的情况,一个很简单的例子是,两个线程同时拿到了库存为1的数据,同时扣减库存,那么库存就会变为负的。所以要解决这个问题还是要让请求串行,串行的最好方式就是加锁,今天我们要探讨的是AQS的锁实现。AQS锁的三大核心自旋lockSupportCAS自旋获取锁失败的线程会通过自旋的方式重复获取锁,自旋也可以理解为死循环。l...原创 2020-03-09 19:18:04 · 596 阅读 · 1 评论 -
非阻塞线程编程之美
背景今天年后最后一天了,是不是很羡慕?不要羡慕,虽然是最后一天了,但是我依然在code的路上,只不过没有在写业务代码了,而是在写一些自己感兴趣的东西,前几天翻了翻多线程的东西,感觉还是又有新的收获的,于是今天又抽空看了下。线程阻塞我们都知道多线程可以提高系统处理业务的能力,但是我们有没有考虑过,很多时候我们编写的多线程代码是阻塞的,尤其是主线程大部分需要阻塞,比如我们常用的join,还有fu...原创 2020-01-16 16:39:59 · 222 阅读 · 0 评论 -
java多线程浅析之sleep、wait、join详解
前言年末业务需求不是很忙了,下班没事重新研究了下多线程相关的知识,感觉对java多线程又有了一个新的认识,所以打算写篇博客总结下。线程的五种状态新建(NEW):新创建了一个线程对象。可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权运行(RUNNI...原创 2020-01-10 21:12:46 · 1486 阅读 · 1 评论