多线程与高并发
啊啊啊能改名不
这个作者很懒,什么都没留下…
展开
-
多线程与高并发编程(四)
一、面试题第一个问题:–背过!利用以下方法: LockSupport互相在5的时候指定对方锁定解锁。(LockSupport用法在上篇笔记中)第二个问题–背过!利用以下方法: ①Lock lock = new ReentrantLock(); 声明锁 ②Condition producer = lock.newCondition() 这里的newCondition(...原创 2020-03-25 10:07:06 · 168 阅读 · 0 评论 -
多线程与高并发编程(三)
atomic、sync、longAdder 在大量、特别多并发线程情况下,atomic比sync效率高,longAdder比atomic效率高。 sync慢是因为可能会去申请重量级锁 longAdder内部用了分段锁,分组一起处理,最后合并(比如1000个线程都++,分成四段每段250++,最后四个合并)【只有在特别大并发的情况下才有优势,一般情况下可能还不如其他两种】一、各种同步锁...原创 2020-03-22 18:26:49 · 178 阅读 · 0 评论 -
多线程与高并发编程(二)
一、Volatile保证线程可见性 MESI 缓存一致性协议(CPU级别)禁止指令重排序 DCL单例(Double Check Lock双重检查锁) 问:在双重检查锁的单例模式中要不要加volatile? 答:要加,一般情况下不加volatile结果仍然不会出问题,【 补充知识: new对象时分为三步: ①给对象申请空间(int类型对象初始设为0) ②给对象...原创 2020-03-18 20:25:58 · 231 阅读 · 0 评论 -
多线程与高并发编程(一)
一、Thread.sleep() 当前线程睡眠指定时间后回到就绪状态(回到等待队列)Thread.yield() 当前线程直接回到就绪状态(回到等到队列)Thread.join() 让其他线程在此行执行后优先执行,等他执行完了,当前才开始执行this.getState() 当前线程的状态(六大状态,runnable自己算一种,下图里面最大的块是runnable状态)禁止stop()方法...原创 2020-03-17 15:32:25 · 505 阅读 · 0 评论 -
多线程-生产者消费者问题、线程池
(—接上篇《多线程-线程的生命周期、线程同步与死锁》的完善)一、线程池工作原理步骤 步骤:核心线程池,声明时预估的数量,池内数量的线程同时进行执行,如果没满则新建一个线程处理刚提交来的任务,若池内线程全部在执行任务,进入下一步。阻塞队列,核心线程池满了后再有线程会判断阻塞队列是否满了,阻塞队列没满就将任务放入阻塞队列中,没满就进入下一步。线程池,判断线程池中所有的线程是否都在执行任务...原创 2020-03-15 14:52:45 · 317 阅读 · 0 评论 -
多线程-线程的生命周期、线程同步与死锁
一、线程操作相关方法注: 在多线程的时候,可以实现唤醒和等待的过程,但是唤醒和等待是Object的方法,唤醒和等待对的是共享对象来说的,而不是针对线程来说的。二、BlockingQueue阻塞队列,JUC包中的(java util concurrent)用法: BlockingQueue blockingQueue = new ArrayBlockingQueue(capa...原创 2020-03-15 14:35:26 · 106 阅读 · 0 评论 -
多线程高并发基础
一、语法 notify()唤醒 wait()等待 在等待和唤醒时,都是对对象进行操作而不是对当前线程,因为notify和wait都是object方法二、JDK1.5后的JUC帮助实现同步的重复睡眠唤起过程 在A课度线程-线程的生命周期、线程同步与死锁(1)中1:50:00左右开始讲 包路径:java.util.concurrent.BlockingQueue;具体使用: ...原创 2020-03-14 14:46:11 · 125 阅读 · 0 评论 -
多线程与高并发编程(九)
多线程与高并发编程(九)一、JMH(测试方法工具)简单介绍1. 测试准备步骤2. 注解二、Disruptor1. 特点:无锁高并发,使用环形Buffer,直接覆盖(不清除)旧的数据,降低GC频率,实现了基于事件的生产者消费者模式(观察者模式)。2. RingBuffer结构:disruptor是利用数组实现的,而且是首尾相连的环形结构(RingBuffer),内部维护一个sequence(代表下一...原创 2020-04-29 14:36:26 · 428 阅读 · 0 评论 -
多线程与高并发编程(八)【线程池二】
多线程与高并发编程(八)【线程池二】一、线程池1. SignleThreadPool2. CachedThreadPool3. FixedThreadPool4. ScheduledThreadPool5. WorkStealingPool6. ParallelSteamAPI二、ThreadPoolExecutor源码观后感1. worker类:2. submit方法:3. execute方法:...原创 2020-04-29 14:23:24 · 362 阅读 · 0 评论 -
多线程与高并发编程(七)【线程池一】
多线程与高并发编程(七)【线程池一】一、线程池前置1. Executor接口 executor()2. ExecutorSevice接口,定义了很多线程池的生命周期的方法3. Callable接口(定义了call()),类似runnable,是一个任务,但是相比runnable中的run()多了个返回值。4. Future接口,承接ExecutorService方法中的返回值,是一个结果5. Fu...原创 2020-04-07 12:54:14 · 732 阅读 · 0 评论 -
多线程与高并发编程(六)【容器】
多线程容器一、容器补充知识(主要从多线程的使用角度上讲)1. 在物理结构上实际上容器只有两种:数组Array,链表Linked2. 在逻辑结构上的容器非常多。3. Collection一共三种List、Set、Queue(多线程最重要的)4. 容器发展过程 1)从HashTable到CHM 2)从Vector到Queue 3)sync与cas二、多线程容器1. ConcurrentHashMap(...原创 2020-04-05 13:59:40 · 294 阅读 · 0 评论 -
多线程与高并发编程(五)
多线程与高并发编程(五)一、AQS二、VarHandle三、ThreadLocal(强引用,配合四中的弱引用来读,四、中具体讲了ThreadLocal)四、补充知识五、堆外内存的回收(超纲啦):一、AQSAQS内的state状态通过CAS来改变AQS内的队列的节点添加,也是通过compareAndSetTail(CAS)来改变双向链表是因为需要看前面节点的状态 CAS操作是针对的ta...原创 2020-04-03 16:09:51 · 288 阅读 · 0 评论