java并发编程
文章平均质量分 78
深入源码,追求精品,并发编程是,每个程序员的必备知识,不会并发编程的程序员不是一个合格的程序员
deprecated4
Nope
展开
-
显式锁和AQS(一)
1.显式锁介绍java中有显示锁与隐藏锁:显示锁是可以有JavaApi来控制的锁属于(Api级别),隐藏锁属于java内置语法比如Synchronized同步锁,隐藏的获取锁跟释放锁如果现在我想拿到Synchronized正在等待的线程是拿不到的我不知道内部的状态,这个锁就是隐藏锁属于(JVM级别)显示锁的用法:lock():获取锁**lockInterruptibly()😗*当有两个线程同时获取锁时,会有一个线程拿不到锁直接把这个拿不到锁的线程停止运行tryLock():尝试获取锁获取到了返回.原创 2022-03-15 22:22:36 · 202 阅读 · 0 评论 -
CAS(比较交换)原子操作讲解
1.讲解CAS概念CAS使用了乐观锁的概念,实现了原子操作那么什么是原子操作,其实可以理解为一个事务,下图表示CAS内部执行原理:传入旧值跟新值让compare去比较内存中已经存在的旧值,如果传入进来的旧值跟内存中的旧值一致那就把传入进来的新增修改,如果不相等则采用自旋的方式拿到内存中的旧值在再次进行比较,自旋可以可以理解为自旋锁机制含义那这里小伙伴们肯定会产生疑问了这cas不是有3步独立的指令了吗,指令1拿到:内存地址的值指令2拿到:我传入进来的旧值指令3拿到:我传入进来的新值那多线程原创 2022-03-15 22:08:36 · 417 阅读 · 0 评论 -
JDK并发工具类讲解
1.CountDownLatch从概括到实战CountDownLatch:从理论上来讲他是个计数器,但我们程序员更喜欢叫他发令枪,他的作用是让子线程跟主线程同步执行的一个发令枪,小伙伴们如果没有理解可以看下面实战部分实战:注意事项:1.CountDownLatch的初始化计数可以随意设置,只需要后期在线程中控制减到0即刻,不是必须要跟线程数设置一致,可以通过代码灵活减去自己想出一个需求:现在我有一个团队,他们干啥啥不行,吃饭第一名我要罚团队中的每个人跑两圈步,跑完再次集合解散具体代码:p原创 2022-03-15 21:57:09 · 1213 阅读 · 0 评论 -
全网最全Fork-Join讲解(从概括到实战)
1.fork-join概括fork-join使用的是一种分而治之的一种思想模式,大数据里面也用得很多这种思想比如常见的MapReduce编程模型,分而治之就是把一个很大的任务拆分成很多个小任务并且小任务之间毫无关联,这个就是分而治之,与之相关的还有一个动态规划,动态规划也是拆分很多个小任务,但是与分而治之不同的是他的小任务之间有依赖关联,听了这些小伙伴们应该了解fork-join框架是个什么了吧,fork-join本质上来说就是一个递归,把一个大任务利用递归拆分成很多小任务,任务处理完毕,在使用递归一级一原创 2022-03-15 21:45:50 · 10257 阅读 · 0 评论 -
多线程通信子弹上膛射击(采用多线程处理)
1.具体需求是这样的:采用多线程技术,例如wait/notify,设计实现一个符合生产者和消费者问题的程序,对某一个对象(枪膛)进行操作,其最大容量是20颗子弹,生产者线程是一个压入线程,它不断向枪膛中压入子弹,消费者线程是一个射出线程,它不断从枪膛中射出子弹。请实现上面的程序。装满20颗子弹,然后在去射击,用完在来装子弹装满20颗在射击,循环作业,本次采用多线程处理。具体思路:1.定义弹夹容量静态成员变量跟线程控制器静态成员变量,用来记录目前弹夹容量跟控制子线程2.定义子弹夹对象子掌原创 2022-03-15 21:33:10 · 221 阅读 · 0 评论 -
Synchronized同步锁线程并行进入
1.我的电脑CPU逻辑处理器为4个,相当于可以在java中同时开启4个线程并行处理2.java中的线程执行,全部是基于系统的时间片轮转机制决定执行那个线程的时间轮转机制:按照进程中的最小单位(线程)来一个进程的时间段的,注意不是根据进程来玩的,是根据进程中的线程来玩的我的电脑有四个并行线程,每个线程并发执行,并发执行是根据时间轮转机制执行的,比如执行到了第一个线程我执行一半又去执行另外一个线程,就是交替执行3.目前我有四个并行处理线程,所以进入Synchronized方法时候肯定会出现同一时刻两原创 2022-03-15 21:29:26 · 234 阅读 · 0 评论 -
多线程通信子弹上膛射击
1.具体需求是这样的:采用多线程技术,例如wait/notify,设计实现一个符合生产者和消费者问题的程序,对某一个对象(枪膛)进行操作,其最大容量是20颗子弹,生产者线程是一个压入线程,它不断向枪膛中压入子弹,消费者线程是一个射出线程,它不断从枪膛中射出子弹。请实现上面的程序。鄙人看了上面的需求,也没有太明白枪的装弹跟射击需要同时进行吗,比如我装一颗子弹,我就用掉这颗子弹,就是边装边射击,不管他了,我就以正常人的角度去思考就行了,我装满20颗子弹,然后在去射击,用完在来装子弹装满20颗在射原创 2022-03-15 21:26:11 · 118 阅读 · 0 评论 -
线程基础,线程之间的共享和协作(2)
1.对Java里的线程再多一点点认识1.run():此方法是跟类挂钩的,就是一个方法,具体呢就是创建多线程时重写的那个run方法。2.start():此方法是跟系统挂钩的,比方说我创建了一个线程而他的作用就是让jvm虚拟机去调用run方法run与start的区别:区别就是run方法可以多次调用,因为跟类挂钩的就是跟我们平常获取对象的get方法一样,而start呢他是跟系统挂钩的只能调用一次,因为线程已经启动了执行了不可能还能够退到就绪状态然后继续启动一波,如果多次调用会直接报错。3.yield(.原创 2022-03-15 20:59:13 · 301 阅读 · 0 评论 -
线程基础,线程之间的共享和协作(1)
1.什么是进程跟线程进程:就是当前正在允许的应用程序(软件)线程:线程是cpu时间片轮转机制调度(RR调度)的最小单位2. CPU核心数跟线程数的关系1.内核:(也称物理核心,中央处理器,cpu的心脏)由来讲解:早期电脑都是单核的,发展到现在出现了摩尔定律失效,纳米工艺突破到3纳米之后在继续突破芯片纳米工艺下去会出现量子隧穿,所以后面也就出现一个CPU里面有多个处理器,来进行提升总体的性能了。摩尔定律:集成电路上可容纳的晶体管数量,大约每隔24个月便会增加一倍芯片纳米工艺: 比如3纳.原创 2022-03-15 20:54:26 · 119 阅读 · 0 评论