![](https://img-blog.csdnimg.cn/20200221145657854.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java高并发编程
Java高并发编程
「已注销」
驻马处皆故里 深巷卖杏花
展开
-
偏向锁的两次竞争
使用 synchronized() 时,括号中的对象就是我们所谓的 锁其实真正的 锁 的信息,存在与括号中对象的对象头中对象头的组成:内容说明Mark Word存储对象的 Hashcode、锁信息、分代年龄Class Metadata Address存储对象类型数据的指针Array length数组的长度(如果对象是数组的话)主要看 MarkWor...原创 2020-05-06 16:37:49 · 512 阅读 · 0 评论 -
哲学家进餐问题:阻塞第五人预防死锁伪代码
Program diningphilosophers;Var fork:array [0...4] of semaphone (:=1); room : semaphore (:=4);i: Integer;procedure philosopher (i: Integer);begin repeat think; /*哲学家正在思考*/ wait(room); /*第5位哲学...原创 2020-04-10 11:58:35 · 460 阅读 · 0 评论 -
进程调度:生产者/消费者问题(消息传递方式)伪代码
代码参考来源:中国大学Mooc《计算机操作系统》蒲晓蓉原创 2020-04-03 18:39:51 · 619 阅读 · 0 评论 -
进程调度:读/写者问题-读者优先(信号量方式)伪代码
代码参考来源:中国大学Mooc《计算机操作系统》蒲晓蓉原创 2020-04-03 15:14:38 · 1406 阅读 · 0 评论 -
进程调度:生产者/消费者问题(信号量方式)伪代码
代码来源:中国大学Mooc《计算机操作系统》蒲晓蓉原创 2020-04-03 14:32:34 · 1164 阅读 · 0 评论 -
CAS
简介简单来说,CAS是一种操作,Java的很多方法实现了这种操作,我们通常习惯性把这些方法也叫做CAS那么,CAS具体指的是什么操作呢?操作CAS全称是比较并替换(Compare and Swap),它的名字其实就是它的操作:读取地址Ad所存的值B我们给定三个值:地址Ad,这个地址可以存数据我们认为这个地址应该存放的值B要替换的值C比较Ad处所存的值和B,如果相等,就把...原创 2020-03-20 10:49:35 · 158 阅读 · 0 评论 -
ABA问题
多图警告!文章目录简介具体问题出现的情况ABA问题的后果解决方法简介CAS会出现ABA问题CAS如果比较发现B和Ad所存的值相等,他就认为Ad所存的值没有发生变化,但是其实很有可能,在比较时,Ad所存的值是变成了其他的值又变回来的这就叫ABA问题,ABA这个名字就是说A先变成B,又变回A具体问题出现的情况线程1进行CAS操作,首先线程1读取到地址Ad存的值是D2. 线程1的CAS...原创 2020-03-20 10:49:04 · 209 阅读 · 0 评论 -
java中的yield()方法
java中yiled()方法的作用是:让当前处于运行状态的线程退回到可运行状态,让出抢占资源的机会用一个简单的比喻来形容就是:三个人塞米赛跑,三人都快跑到90m位置的时候,2号突然被传送到了起点,三人继续跑,这样1号和3号赢的机会就大得多2号就相当于调用了yield()的线程,线程调用了yiled()之后回退到可运行状态,将抢占资源的机会让给其他相同优先级的线程。...原创 2020-01-29 15:54:05 · 9305 阅读 · 6 评论 -
Java的重排序
int a = 1;int b = 2;int c = 3;这段代码我们可能认为它是按照顺序来赋值的,其实并不是因为这三次赋值相互之间没有任何关系,于是Java中这段代码的执行顺序可能是乱序的,我们并不知道谁先执行,这种可能出现乱序的情况叫做重排序如果代码是这样的int a = 1;int b = a;int c = b;这样后面的赋值需要依赖前面的赋值,所以就不会发生重排序...原创 2020-02-27 15:31:47 · 532 阅读 · 0 评论 -
CacheLine对齐
CacheLine总所周知,计算机将数据从主存读入Cache时,是把要读取数据附近的一部分数据都读取进来这样一次读取的一组数据就叫做CacheLine,每一级缓存中都能放很多的CacheLine多核CUPL1、L2、L3指一级缓存,二级缓存,三级缓存CUP中的每个核均可单独处理一个线程每个核公用L3超线程一个核中有多套PC和Register,他们公用一个ALU,这样一个核可...原创 2020-02-27 13:38:00 · 6288 阅读 · 5 评论 -
Java8七种线程池
七种线程池java通过工具类Executors种各种线程池的工厂方法创建(1)CachedThreadPoolExectors.newCachedThreadPool无长度限制,当新任务加入CachedThreadPool时。如果池内其他线程无空闲就产生新的线程执行任务,如果空闲就使用空闲的线程执行任务线程空闲超过一定时间(默认60s,可设置)自动从池中删除可能会造成内存溢出,一般...原创 2020-02-25 22:44:18 · 555 阅读 · 0 评论 -
Java高并发容器选择
1. 对于Map/Set的使用(1)非并发HashMapTreeMapLinkHashedMap(2)不复杂的、并发量低的并发HashTableCollections.sychronizedXXX(3)复杂的、并发量高的并发ConcurrentHashMap //不需要排序的ConcurrentSkipListMap //需要排序的2.队列的使用(1)非并...原创 2020-02-25 14:52:53 · 330 阅读 · 0 评论