JUC
文章平均质量分 92
Bruin_W
只想把自己遇到的问题发出来记录,并希望能帮到大家-.-
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
volatile可见性禁重排原理以及不保证原子性解决方案,volatile下的双端检锁机制单例模式的原理
先说说并发和并行的区别1.并发是多个线程同时访问2.并行是多个方面一起正在做volatile是Java虚拟机提供的轻量级同步机制三大特性:保证可见性,不保证原子性,禁止指令重排JMM(java内存模型)高并发系统还是单机版系统(高并发伴随很多问题,不得不研究底层JMM)JMM第一大特性之内存可见性变量值一旦被某个线程优先修改改变 其他线程立刻可见对象在堆里面,整个虚拟机在内存里面JMM三大特性可见性举例package com.wsx;import java.util.con原创 2020-05-20 00:28:14 · 397 阅读 · 0 评论 -
常用的阻塞队列用法以及原理
理论:火锅店欢迎阻塞去银行排队不得不阻塞阻塞队列做蛋糕,有没有货,和柜子满不满为什么用架构继承关系collection—>queue->七个阻塞队列接口三个红色是重点一个粉色需注意接近无界(21亿)synchronousQueue是生产一个,没消费不会再生产,故为不储存(贝克汉姆球鞋)最后一个注意拼写(deque)阻塞队列知道吗所有用法API异常用法element()是检查队头元素是谁import java.util.concurrent.Arr原创 2020-05-17 11:12:37 · 922 阅读 · 0 评论 -
List在高并发场景下保证线程安全的三种方案,CopyOnWriteArrayList写时复制读写分离
Java并发修改异常:java.util.ConcurrentModificationExpectionvector线程安全但是是JDK1.0诞生arrayList线程不安全但是是JDK 1.2诞生Collection是一个接口Collections是一个辅助工具类目前两种解决方案:new vector<>();collctions.synchronizedList(new ArrayList<>());还有改错思路思想//list线程不安全问题,已经举一个不安全的原创 2020-05-17 00:22:17 · 1691 阅读 · 1 评论 -
多线程并发常用API countDownlatch syslicbarrier semaphore
CountDownLatchdemo1火箭发射10 9 8到0await方法将会执行,直到计数到0package com.wsx.countDown;import java.util.concurrent.CountDownLatch;public class CountDownDemo { public static void main(String[] args) {...原创 2020-04-23 01:02:10 · 297 阅读 · 0 评论 -
为什么使用线程池,如何使用,重要参数解释以及线程池底层工作原理
脑图Java查看电脑几核package com.wsx.threadPool;public class ThreadPoolDemo { public static void main(String[] args) { System.out.println(Runtime.getRuntime().availableProcessors()); }}...原创 2020-04-22 19:46:57 · 599 阅读 · 1 评论 -
RWLock, ReentrantReadWriteLock读写锁的使用
读写锁举例:红蜘蛛,多个人听(读),一个人讲(写)synchronized重量太大不适合i+会生成新的对象string a =new String(“abc”)string a= “abc”可以让读睡一秒(Thread.sleep(10);//这句一加可能为null因为写延迟了,有些读已经开始读对象了,导致读到空值)package juc;import java.util.Ran...原创 2020-04-22 18:38:57 · 310 阅读 · 0 评论 -
ABA问题的解决--CAS
CAS的三个缺点第一个缺点:while循环会造成一直匹配不到值的循环操作,这也是CAS的一个缺点第二个缺点:只能对一个对象进行原子操作,并不能对一块代码进行原子操作第三个缺点就是接下来要讲的ABA问题ABA问题的产生:ABA问题就是加入主存中的值为A(1)两个线程都会去主存里拿到一份值A(2)t1线程由于执行时间短,两秒,所以执行了又A->B->A的操作(3)由于JMM...原创 2020-03-14 21:45:27 · 394 阅读 · 0 评论 -
CAS源码分析
·原创 2020-03-14 19:21:11 · 664 阅读 · 0 评论 -
线程八锁
1.标准访问,先打印苹果还是android ? 先IOS再Android2.睡觉4秒钟,先打印苹果还是android? 先IOS再Android得出结论:类中有多个同步方法,同一时间内,只能有一个线程进行访问这些方法中的一个也就是锁是当前对象this,synchronized是对象锁不是在方法上加锁,锁的是Phone()对象(object monitor)被锁定后其他线程都不能进入到当前对...原创 2020-03-11 21:18:00 · 233 阅读 · 0 评论 -
线程虚假唤醒
多线程中不允许用if做判断,只能用while去循环(loop)线程虚假唤醒多线程出现number加减出现2原因解析,使用while就不会出现这种情况package juc;class NumberUpAndDown{ private int number = 0; public synchronized void numberUp() throws Interrupte...原创 2020-03-08 01:36:46 · 353 阅读 · 0 评论 -
除了继承Thread和实现Runnable接口,创建线程的第三种方式:Callable函数式接口并且可以返回结果FutureTask
即实现runnable接口又能传入Callable的构造方法为什么要找这样一个方法因为想new Thread()时传入runnable类型的接口并且想实现callable接口Callable接口类似于Runnable ,因为它们都是为其实例可能由另一个线程执行的类设计的。 然而,A Runnable不返回结果,也不能抛出被检查的异常。FutureTask 的构造方法FutureTask...原创 2020-03-04 15:48:00 · 458 阅读 · 0 评论 -
JUC之ReentrantLock,Condition;蚂蚁金服 面试题:三个线程交替打印ABC
多线程编程重要的就是标志位Flag,锁,唤醒多线程编程注意的两个地方:标志位Flag和while1.判断2.干活3.通知+唤醒之前synchronized锁释放之后线程疯抢争夺资源但是被Lock,Condition控制后则可以指定线程运行顺序,按需接力,不用疯抢(如果不用Condition依然疯抢)三个线程交替打印ABC(五次)package juc;import java.u...原创 2020-03-03 15:35:50 · 781 阅读 · 0 评论
分享