JUC
关于JUC的基本知识与面试题
LatteCK
想要的东西都很贵,只能不断地努力奔跑
同是风华正茂,怎可甘拜下风
展开
-
各种锁的理解
各种锁的理解一、公平锁、非公平锁公平锁: 非常公平, 不能够插队,必须先来后到!非公平锁: 非常不公平,可以插队 (默认都是非公平)public ReentrantLock() { sync = new NonfairSync();}public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync();}二、可重入锁可重入锁(递归锁)synchronized//原创 2021-04-02 00:04:12 · 123 阅读 · 0 评论 -
深入理解CAS与原子引用
深入理解CAS与原子引用一、深入理解CAS什么是CASublic class CASDemo { //CAS compareAndSet:比较并交换 public static void main(String[] args) { AtomicInteger atomicInteger = new AtomicInteger(2020); // 期望、更新 // public final boolean compareAndSet原创 2021-04-02 00:04:00 · 201 阅读 · 0 评论 -
玩转单例模式
玩转单例模式饿汉式 DCL懒汉式,深究饿汉式public class Hungry { //可能会浪费空间 private byte[] data1 = new byte[1024 * 1024]; private byte[] data2 = new byte[1024 * 1024]; private byte[] data3 = new byte[1024 * 1024]; private byte[] data4 = new byte[1原创 2021-04-02 00:03:47 · 74 阅读 · 1 评论 -
JMM与Volatile
JMM与Volatile一、JMM请你谈谈你怼Volatile的理解Volatile是Java虚拟机提供轻量级的同步机制1、保证可见性2、不保证原子性3、禁止指令重排什么是JMMJMM: Java内存模型,不存在的东西,概念!约定!关于JMM的一些同步的约定:1、线程解锁前,必须把共享变量立刻刷回主存2、线程加锁前,必须读取主存最新值到工作区3、加锁和解锁是同一把锁。线程 工作内存、主内存8种操作:内存交互操作有8种,虚拟机实现必须保证每一个操作都是原子的,不可在原创 2021-04-02 00:03:36 · 121 阅读 · 0 评论 -
Java之异步回调
异步回调Future 设计的初衷: 对将来的某个事件的结果进行建模/** * 异步调用: CompletableFuture * // 异步执行 * // 成功回调 * // 失败回调 */ public class Demo01 { public static void main(String[] args) throws ExecutionException, InterruptedException { // 没有返回值的 runAsync 异步回调/*原创 2021-04-02 00:03:23 · 408 阅读 · 0 评论 -
Stream流式计算与ForkJoin
Stream流式计算与ForkJoin一、Stream流式计算什么是Stream流式计算大数据:存储+计算集合、 MySQL本质就是存储东西的;计算都应该交给流来操作!/*题目要求:一分钟内 完成此题,只能用一行代码实现!* 现在有5个用户!筛选:* 1、ID必须是偶数* 2、年龄必须大于23岁* 3、用户名转为大写字母* 4、用户名字母倒着排序* 5、只输出一个用户!*/public class Test { public static void main(Str原创 2021-04-01 22:39:09 · 330 阅读 · 0 评论 -
四大函数式接口
四大函数式接口新时代的程序员:lambda表达式、链式编程、函数式接口、Stream流式计算函数式接口:只有一个方法的借口@FunctionalInterface // 表示这是一个函数式接口public interface Runnable { public abstract void run();}// 泛型、枚举、反射 // lambda表达式、链式编程、函数式接口、Stream流式计算 // 超级多FunctionalInterface // 简化编程模型,在新版本的原创 2021-04-01 22:26:25 · 138 阅读 · 0 评论 -
java之线程池
线程池线程池:三大方法、七大参数、四种拒绝策略池化技术程序的运行,本质:占用系统的资源!优化资源的使用!=> 池化技术线程池、连接池、内存池、对象池///… 创建、销毁十分浪费资源池化技术: 事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我线程池的好处:1、降低资源的消耗2、提高相应的速度3、方便管理线程复用、可以控制最大并发数、管理线程线程池:三大方法ExecutorService threadExecutor = Executors.newSingle原创 2021-04-01 22:10:49 · 82 阅读 · 0 评论 -
阻塞队列与同步队列
阻塞队列与同步队列阻塞队列:一、BlockingQueue什么情况下会使用阻塞队列: 多线程并发处理,线程池!学会使用队列添加、移除四组API方式抛出异常有返回值,不抛出异常阻塞等待超时等待添加addoffer()putoffer(,)移除removepoll()takepoll(,)检测队首元素elementpeekpublic class testBlockingQueue { public static原创 2021-04-01 18:47:20 · 347 阅读 · 1 评论 -
java之读写锁
读写锁ReadWriteLock/** 独占锁(写锁) 一次只能被一个线程占有* 共享锁(读锁) 多个线程可以同时占有* ReadWriteLock* 读-读 可以共存!* 读-写 不能共存!* 写-写 不能共存!* */import java.util.HashMap;import java.util.Map;import java.util.concurrent.locks.ReadWriteLock;import java.util原创 2021-04-01 15:39:38 · 103 阅读 · 0 评论 -
常用的辅助类
常用的辅助类一、CountDownLath//计数器public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { // 倒计时总数是6, 必须要执行任务的时候,再使用! CountDownLatch countDownLatch = new CountDownLatch(6); for (int i原创 2021-04-01 15:34:12 · 194 阅读 · 0 评论 -
Callable
Callable1、可以有返回值2、可以抛出异常3、方法不同,run()/call()代码测试import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask;import java.util.concurrent.locks.ReentrantLock;/***1、探究原理*2、觉自己会用原创 2021-04-01 15:13:47 · 100 阅读 · 0 评论 -
多线程下集合类不安全
多线程下集合类不安全List 不安全// java.util.ConcurrentModificationException 并发修改异常!public class listTest { public static void main(String[] args) { //List<String> list = new ArrayList<>(); //List<String> list = new Vector<&原创 2021-04-01 15:04:08 · 116 阅读 · 0 评论 -
Lock锁
Lock锁与八锁现象一、Lock传统 synchronized// 基本的卖票例子/** 真正的多线程开发,公司中的开发、降低耦合类* 线程就是一个单独的资源类,没有任何的附属操作* 1、 属性、方法*/public class SaleTicketDemo01 { public static void main(String[] args) { //并发:多个线程操作同一个资源类,把资源类丢入线程 Ticket2 ticket = new原创 2021-04-01 14:58:43 · 220 阅读 · 0 评论 -
什么是JUC
什么是JUC与线程和进程一、什么是JUC面试高频问 java util concurrentjava.util 工具包 包、分类业务:普通的线程代码 ThreadRunnable: 没有返回值,效率相比Callable相对较低二、线程和进程线程和进程线程、进程进程是操作系统中的应用程序,是资源分配的基本单位。线程的用来执行具体的任务和功能,是cpu调度和分派的基本单位进程:一个程序 qq.exe Music.exe 程序的集合; 一个进程往往可以包含多个线程,至少包含原创 2021-04-01 14:48:25 · 170 阅读 · 0 评论