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