随笔分类 - 多线程JUC进阶
摘要:volatile的特性: 1. 保证可见性 2. 不保证原子性 3. 禁止指令重排 可见性 可见性:线程变量可以同步主存的共享变量 可见性问题:线程和cpu不是在同一内存中工作,cpu的内存叫做主存,线程的内存叫做工作内存。当线程中某个变量发生了变化,就会同步到主存中,没有变化的就不会同步。可以发现
阅读全文
摘要:JMM(java Memoey Model)java内存模型 内存交互操作 内存交互操作有8种,虚拟机实现必须保证每一个操作都是原子的,不可在分的(对于double和long类型的变量来说,load、store、read和write操作在某些平台上允许例外) lock (锁定):作用于主内存的变量,
阅读全文
摘要:异步回调 很像ajax package com.luoKing.future; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; public class De
阅读全文
摘要:Fork/Join框架强调任务的分解。 该框架主要有Fork,join两个操作组成,Fork操作主要用于对任务和数据进行划分。join操作用于对各个部分的运行结果进行合并 该框架有一个重要的方法,叫做工作窃取法,当一个线程完成任务时,会去查看其它线程是否完成了任务,如果没有,就将窃取一部分任务来处理
阅读全文
摘要:函数型接口(function) 作用:传入什么,就输出什么 源码 @FunctionalInterface public interface Function<T, R> { R apply(T t); } 使用 package com.luoKing.funcation; import java.
阅读全文
摘要:线程池的技术: 事先准备好一些资源,有人要用就来拿,用完记得还(关闭池) 线程池的好处 减少资源的消耗 提高系统的性能,提高相应速度(因为池的开启和关闭非常消耗资源) 易于一起管理线程 总结:线程池的优点:线程复用,可以控制最大并发数,管理线程 三大方法 public static void mai
阅读全文
摘要:同步队列(SynchronizedQueue)存一个值必须先取出存入的值,才能继续存值,可以理解为容量为0的BlockingQueue。如果想存两个值,那就会一直等待阻塞。注意需要在线程中使用,普通方法使用时会发生阻塞 package com.luoKing.BlockingQueue; impor
阅读全文
摘要:使用场景 多线程并发处理,线程池 使用方法 添加,移除 四组API(应用程序接口) 1. add和remove(会抛出异常),检测队列首个元素(element) /* * 会抛出异常 * * */ public static void test1(){ //capacity:队列容量 ArrayBl
阅读全文
摘要:读读 可以共存 读写 不可以共存 写写 不可以共存 package com.luoKing.ReadWrite; import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.ReadWriteLo
阅读全文
摘要:CountDownLatch 官方文档解释 //允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。 //A CountDownLatch用给定的计数初始化。 await方法阻塞,直到由于调用countDown()方法,当前计数达到零,此后所有等待线程被释放,并且任何后续的调用awa
阅读全文
摘要:我们知道 new Thread().start()//这是有且只有唯一启动线程的方法 查看Thread()源码 public Thread(Runnable target, String name) { init(null, target, name, 0); } 发现需要的参数是Runnable类
阅读全文
摘要:List package com.luoKing.unsafe; import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.Vector; import java.util.c
阅读全文
摘要:1 package com.luoKing.Lock8; /* * 1、两个同步方法,被同一个对象调用,由于锁的存在,谁先拿到锁,谁先执行(谁在前面,谁先执行) * * 2、 一个同步方法延时,另一个正常 被同一个对象调用?谁先拿到锁,谁先执行,与谁休息无关 * */ import java.uti
阅读全文
摘要:synchronized 版本 package com.luoKing.PC; //synchronized版消费者和生产者 public class A { public static void main(String[] args) { Data data = new Data(); new T
阅读全文