![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
xixihaha_coder
坚持就是胜利!
展开
-
13-各种锁的理解
23.各种锁的理解:公平锁、非公平锁、可重入锁、自旋锁、死锁 公平锁 :非常公平 ,线程先来后到 非公平锁 :非常不公平,可以插队(默认是非公平的) public ReentrantLock() { sync = new NonfairSync(); } public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync(); } 可重入锁 可重入锁(原创 2021-10-19 15:42:13 · 92 阅读 · 0 评论 -
12-深入理解CAS&原子引用解决ABA问题
21.深入理解CAS 什么是CAS compareAndSet 大厂你必须要深入研究底层! 操作系统、计算机网络原理 Unsafe类 getAndIncrement 底层 相当于num++ CAS :比较当前工作内存中的值和主内存中的值,如果这个值是期望的,那么则执行操作!如果不是就一直循环! package cas; import java.util.concurrent.atomic.AtomicInteger; //CAS public class CASDemo {原创 2021-10-19 15:40:47 · 129 阅读 · 0 评论 -
11-彻底玩转单例模式
20.彻底玩转单例模式 饿汉式 DCL懒汉式 饿汉式 package single; //饿汉式单例 public class Hungry { //一上来就全部加载,浪费空间, //那我现在想用的时候再创建,不用就放在那 ,于是乎来了 懒汉式单例 private byte[] data1=new byte[1024]; private byte[] data2=new byte[1024]; private byte[] data3=new byte[1024原创 2021-10-19 15:38:41 · 109 阅读 · 0 评论 -
10-Volatile&保证可见性&不保证原子性&禁止指令重排
18.理解JMM 请你谈谈对Volatile的理解 Volatile是java虚拟机提供 轻量级的同步机制 1.保证可见性 (和JMM有关) 2.不保证原子性 3.禁止指令重排 什么是JMM JMM : java内存模型,不存在的东西,概念,约定 关于JMM的一些同步的约定: 1、线程解锁前,必须把共享变量立刻刷回主存。 2、线程加锁前,必须读取主存中的最新值到工作内存中! 3、加锁和解锁是同一把锁 线程 工作内存 主内存 内存交互的8种操作 要成对出现 问题? package vola原创 2021-10-18 17:50:18 · 111 阅读 · 0 评论 -
09-Stream流式计算&ForkJoin&异步回调
15.Stream流式计算 什么是Stream流式计算 大数据:存储+计算 存储:Nysqk 本质就是存储东西的; 计算都应该交给流来操作 User id name age 16.ForkJoin 什么是ForkJoin ForkJoin在JDK1.7,并行执行任务!提高效率 大数据 Map Reduce (把大任务拆成小任务) ForkJoin特点:工作窃取 这个里面维护的都是双端队列 ForkJoin操作 大数据量才能体现 package forkjoin; import原创 2021-10-18 17:48:05 · 168 阅读 · 0 评论 -
08-四大函数式接口(必需掌握)
14.四大函数式接口(必需掌握) 新时代的程序员:lambda表达式、链式编程、函数式接口、Stream流式计算 函数式接口:只有一个方法的接口 @FunctionalInterface public interface Runnable { public abstract void run(); } //超级多FunctionalInterface //简化编程模型,在新版本的框架底层大量使用 //foreach 消费者类的函数式接口 1.Function接口 函数式接口 packag原创 2021-10-18 17:45:21 · 107 阅读 · 0 评论 -
07-线程池(重点)&三大方法&7大参数&4种拒绝策略
13.线程池(重点) 线程池:三大方法 7大参数 4种拒绝策略 池化技术 程序的运行,本质:占用系统的资源!优化资源的使用!==> 池化技术 池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我 线程池的好处 1.降低资源的消耗 2.提高响应的速度 3.方便管理 线程复用,可以控制最大并发数,管理线程 线程池,三大方法 package test03; import java.util.concurrent.ExecutorService; import java.util.c原创 2021-10-18 17:44:38 · 149 阅读 · 0 评论 -
06-读写锁&阻塞队列&同步队列 SynchronousQueue
10.读写锁 package test02; import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.ReentrantReadWriteLock; /** * 独占锁(写锁) 一次只能被一个线程占用 * 共享锁(读锁) 多个线程可以同时占有 * ReadWriteLock * 读-读 可以共存! * 读-写 不能共存! * 写-写 不能共存! */ public class R原创 2021-10-18 17:42:58 · 132 阅读 · 0 评论 -
05-常用的辅助类(必会)
9.常用的辅助类(必会) 9.1 CountDownLatch package test02; import java.util.concurrent.CountDownLatch; //计数器 public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { //总数是6 CountDownLatch countDownLa原创 2021-10-18 17:41:01 · 95 阅读 · 0 评论 -
04-集合类不安全&Callable
7.集合类不安全 list不安全 CopyOnWriteArrayList package test02; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.UUID; import java.util.concurrent.CopyOnWriteArrayList; //java.util.ConcurrentModificationException原创 2021-10-18 17:40:26 · 92 阅读 · 0 评论 -
03-8锁现象
6. 8锁现象 package test01; import java.util.concurrent.TimeUnit; /* *8锁 ,就是关于锁的8个问题 * 1.先打印 发短信还是 打电话 //1.发短信 2.打电话 锁的存在 * 2.发短信延迟 4s 先发短信还是 打电话 //等4s后 1.发短信 2.打电话 */ public class Test1 { public static void main(String[] args) { Phone p原创 2021-10-18 17:39:17 · 69 阅读 · 0 评论 -
02-生产者消费者问题&condition 实现精准唤醒
4.生产者消费者问题 package test01; /** * 线程之间的通信问题:生产者和消费者问题! 等待唤醒,通知唤醒 * 线程交替执行AB操作同一个变量num = 0 * A num+1 * B num-1 */ public class PC { public static void main(String[] args) { Data data = new Data(); new Thread(()->{ for原创 2021-10-18 17:38:27 · 123 阅读 · 0 评论 -
01-回顾多线程
本视频笔记 全手打,由b站狂神说 视频获取 1.什么是JUC “概念 JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包 业务:普通的线程代码 Thread Runnable 没有返回值,效率相比与Callable 相对较低! 2.线程和进程 进程 qq.exe music.exe 程序的集合 一个进程往往可可以包含多个线程,至少包含一个! java默认有几个线程? 2个 main 、GC 线程:开了一个进程Typora,写字,自动保存(线程负责的) .原创 2021-10-18 17:36:09 · 80 阅读 · 0 评论