![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
BNMZY
chatgpt搬运工
展开
-
JUC - ThreadLocal
基本 定义 ThreadLocal,即线程变量是一个以ThreadLocal对象为键,任意对象为值的存储结构。这个结构会被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个值 通过set(T)方法来设置一个值,在当前线程下再通过get()方法获取到原先设置的值 源码 nextHashCode 是ThreadLocal 的唯一ID private final int threadLocalHashCode = nextHashCode(); CAS原创 2020-07-08 17:02:42 · 123 阅读 · 0 评论 -
反射、注解
反射 基本 定义:将各类的各个部分封装为其他对象(如方法集) 好处 可以在程序运行过程中,操作这些对象 可以解耦,提高程序扩展性 获取Class //第一阶段获取 Class class1 = Class.forName("反射.entity.Person"); //第二阶段获取 Class class2 = Person.class; //第三阶段获取 Person person ...原创 2020-04-04 00:19:22 · 134 阅读 · 0 评论 -
JUC-CAS
什么是CAS CAS:比较当前工作内存中的值和主内存中的值 如果这个值是期望的,那么则执行操作 如果不是就一直循环 缺点: 循环会耗时 一次性只能保证一个共享变量的原子性 ABA问题 Unsafe类 自旋锁例子: ABA问题 原子引用 解决ABA问题,引入原子引用,对应的思想是乐观锁 //初始值,初始版本号 AtomicStampedReference<Integer> reference = new AtomicStampedReference<Integer&g原创 2020-05-26 18:31:32 · 123 阅读 · 0 评论 -
Volatile
Volatile 基本 保证线程之间的可见性(JMM原子操作) Volatile保证可见性与有序性,但是不保证原子性(需要借助synchronized这样的锁机制) 缓存可见性实现原理 底层实现主要是通过汇编lock前缀指令,它会锁定这块内存区域的缓存(缓存行锁定)并回写到主内存 IA-32架构软甲开发者手册对lock指令的解释: 会将当前处理器缓存行的数据立即写回到系统内存 这个写回内存...原创 2020-05-26 18:25:43 · 137 阅读 · 0 评论 -
JUC-阻塞队列+线程池
文章目录BlockingQueue概念四组APISynchronousQueue同步队列代码线程池池化技术线程池创建三大方法AA BlockingQueue 概念 阻塞 队列间关系 使用阻塞队列的场景 多线程并发处理,线程池! 四组API 方式 抛出异常 有返回值 阻塞等待 超时等待 添加 add offer put offer(,) 移除 remove poll take poll(,) 检测队列首 element peek 抛出异常 /** * 抛出异常原创 2020-05-26 17:56:04 · 246 阅读 · 0 评论 -
JUC-四大函数式接口&流式计算
函数式接口 定义 只有一个方法的接口 @FunctionalInterface public interface Runnable { public abstract void run(); } 都可以用lambda表达式来简化 四大函数式接口 Function /** * Function 函数型接口(可用lambda) * 有一个输入参数,有一个输出参数 * */ public class Demo01 { public static void main(String[]原创 2020-05-26 17:55:54 · 227 阅读 · 0 评论 -
JUC-ForkJoin简单示例
概念 定义 JDK1.7之后,并行执行任务,提高效率。大数据量 将大任务分成几个小任务,用不同的线程去处理,最终合并结果 流程图 ForkJoin特点:工作窃取 里面维护的都是双端队列 代码 定义 /** * 求和计算的任务! * 如何使用 forkjoin * 1. forkjoinPool 通过它来执行 * 2. 计算任务 forkjoinPool.execute(ForkJoinTask task) * 3. 计算类继承RecursiveTask<返回类型>,重写co原创 2020-05-26 17:55:41 · 184 阅读 · 0 评论 -
JUC-异步调用
概念 定义 类似于Ajax,主要实现三个方法 异步执行 成功回调 失败回调 简单代码 // 发起一个请求 , 没有返回值的 runAsync 异步回调 CompletableFuture<Void> completableFuture = CompletableFuture.runAsync(()->{ try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) {原创 2020-05-26 17:55:30 · 162 阅读 · 0 评论 -
JUC-concurrent包
文章目录集合类CopyOnWriteArrayListCopyOnWriteSetConcurrentHashMapCallable基本代码常用的辅助类CountDownLatchCyclicBarrierSemaphoreA 集合类 CopyOnWriteArrayList 对比传统list // List<String> list = new ArrayList<>(); //并发下ArrayList不安全,需要Synchronized /** * 解决方法 * 1. n原创 2020-05-10 22:48:19 · 239 阅读 · 0 评论 -
JUC-八锁现象
概念 由锁引发的8个问题 同一对象,两个同步方法,哪个先行? 同一对象,两个同步方法,先被调用的执行前锁住2s,哪个先行? 一个对象,一个同步,一个普通方法,哪个先行? 两个对象,分别调用两个同步方法,先被调用的执行前锁住2s,哪个先行? 增加两个静态同步方法,哪个先行? 两个对象,分别调用两个静态同步方法,哪个先行? 一个对象,一个普通同步方法,一个静态同步方法,哪个先行? 两个对象,一个普通同步方法,一个静态同步方法,哪个先行? 代码 调用区 Phone phone = new原创 2020-05-10 12:04:51 · 132 阅读 · 0 评论 -
JUC-基础,生产者&消费者
文章目录线程和进程线程状态wait/sleepLock锁1. 传统Synchronized2. lock接口3. ReentrantLock传统的生产者、消费者问题synchronized版虚假唤醒问题JUC版生产者消费者问题AA 线程和进程 java默认2个线程:Main和GC 对于java而言 Thread、Runnable、Callable java开启不了线程:start是调用native方法创建线程的 线程状态 NEW :新生 RUNNABLE :运行 BLOCKED:阻塞 WAITING原创 2020-05-10 10:54:35 · 259 阅读 · 0 评论