随笔分类 - JUC并发
摘要:死锁 死锁测试,怎么排除死锁: public class Test01 { public static void main(String[] args) { String lockA = "lockA"; String lockB = "lockB"; new Thread(new MyThread
阅读全文
摘要:自旋锁 spinlock 自定义一个锁测试 public class SpinLockDemo { AtomicReference<Thread> atomicReference = new AtomicReference(); //加锁 public void myLock() { Thread
阅读全文
摘要:各种锁的理解 公平锁、非公平锁 公平锁: 非常公平, 不能够插队,必须先来后到! 非公平锁:非常不公平,可以插队 (默认都是非公平) public ReentrantLock() { sync = new NonfairSync(); } public ReentrantLock(boolean f
阅读全文
摘要:深入理解CAS 什么是 CAS 大厂你必须要深入研究底层!有所突破! public class Test01 { // CAS compareAndSet : 比较并交换! public static void main(String[] args) { AtomicInteger atomicIn
阅读全文
摘要:彻底玩转单例模式 饿汉式 public class Hungry { private byte[] data1 = new byte[1024*1024]; private byte[] data2 = new byte[1024*1024]; private byte[] data3 = new
阅读全文
摘要:指令重排 什么是 指令重排: 你写的程序,计算机并不是按照你写的那样去执行的。 源代码—>编译器优化的重排—> 指令并行也可能会重排—> 内存系统也会重排—-> 执行 处理器在进行指令重排的时候,考虑:数据之间的依赖性! int x = 1; // 1 int y = 2; // 2 x = x +
阅读全文
摘要:Volatile 保证可见性 public class Test01 { // 不加 volatile 程序就会死循环! // 加 volatile 可以保证可见性 private volatile static int num = 0; public static void main(String
阅读全文
摘要:JMM 请你谈谈你对 Volatile 的理解 Volatile 是 Java 虚拟机提供轻量级的同步机制 1、保证可见性 2、不保证原子性 3、禁止指令重排 什么是JMM JMM : Java内存模型,不存在的东西,概念!约定! 关于JMM的一些同步的约定: 1、线程解锁前,必须把共享变量立刻刷回
阅读全文
摘要:异步回调 Future 设计的初衷: 对将来的某个事件的结果进行建模 /** * 异步调用: CompletableFuture * 异步执行 * 成功回调 * 失败回调 */ public class Test01 { public static void main(String[] args)
阅读全文
摘要:ForkJoin 什么是 ForkJoin ForkJoin 在 JDK 1.7 , 并行执行任务!提高效率。大数据量! 大数据:Map Reduce (把大任务拆分为小任务) ForkJoin 特点:工作窃取 这个里面维护的都是双端队列,一端队列执行完可以窃取另一端队列的任务来帮忙执行 F
阅读全文
摘要:Stream流计算 什么是Stream流式计算 大数据:存储 + 计算 集合、MySQL 本质就是存储东西的; 计算都应该交给流来操作! /** * 题目要求:一分钟内完成此题,只能用一行代码实现! * 现在有5个用户!筛选: * 1、ID 必须是偶数 * 2、年龄必须大于23岁 * 3、用户名
阅读全文
摘要:四大函数式接口(必需掌握) lambda表达式、链式编程、函数式接口、Stream流式计算 很重要 函数式接口: 只有一个方法的接口 @FunctionalInterface public interface Runnable { public abstract void run(); } // 泛
阅读全文
摘要:线程池 线程池:三大方法、7大参数、4种拒绝策略 池化技术 程序的运行,本质:占用系统的资源! 优化资源的使用!=>池化技术 线程池、连接池、内存池、对象池///….. 创建、销毁。十分浪费资源 池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我。 线程池的好处: 1、降低资源的消
阅读全文
摘要:SynchronousQueue 同步队列 没有容量, 进去一个元素,必须等待取出来之后,才能再往里面放一个元素! put、take public class Test01 { /** * 同步队列 * 和其他的BlockingQueue 不一样, SynchronousQueue 不存储元素 *
阅读全文
摘要:BlockingQueue的四组API 会抛出异常 public class Test01 { public static void main(String[] args) { test(); } public static void test() { //队列的大小:3 ArrayBlocking
阅读全文
摘要:阻塞队列 什么情况下我们会使用 阻塞队列:多线程并发处理,线程池! 四组API |方式 |抛出异常 | 有返回值,不抛出异常 | 阻塞 等待 | 超时等待
阅读全文
摘要:ReadWriteLock /** * 独占锁(写锁) * 一次只能被一个线程占有 * 共享锁(读锁) 多个线程可以同时占有 * * ReadWriteLock * 读-读 可以共存! * 读-写 不能共存! * 写-写 不能共存! */ public class Test04 { public s
阅读全文
摘要:常用的辅助类(必会) CountDownLatch 代码实现 public class Test04 { public static void main(String[] args) throws InterruptedException { // 总数是8,必须要执行任务的时候,再使用! Coun
阅读全文
摘要:Callable 1、可以有返回值 2、可以抛出异常 3、方法不同,run() / call() 代码测试 public class CallableTest { public static void main(String[] args) throws ExecutionException
阅读全文
摘要:ConcurrentHashMap Map不安全 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 /** * The maximum capacity, used if a higher value is implicitl
阅读全文

浙公网安备 33010602011771号