随笔分类 - JUC编程简介
1
摘要:###自旋锁 A线程进来没问题,不解锁的情况下,B线程进来会空循环等待A解锁 package Lock.SpinlockDemo; import java.util.concurrent.atomic.AtomicReference; public class SpinlockA { // int
阅读全文
摘要:##死锁排查 看日志 盏堆信息 使用jps-l定位进程号 使用jstack找到死锁问题
阅读全文
摘要:###CAS会产生ABA问题(使用别人动过的值,但不知情) package VolatileA; import java.util.concurrent.atomic.AtomicInteger; /** * CAS compareAndSet:比较并交换 * 会产生ABA问题(使用别人动过的值,但
阅读全文
摘要:##懒汉单例模式 package singleInstanceA; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetExcep
阅读全文
摘要:####Volatile是Java 虚拟机提供--轻量级的同步机制-- 保证可见性 保持刷新主内存属性 不保证原子性 不可分割 线程A在执行任务的时候,不能被打扰的,也不能被分割。要么同时成功,要么同时失败。 可以用lock/synchronized解决 也可以用原子类AtomicInteger操作
阅读全文
摘要:###forkJoin的使用,分支合并 如何使用forkJoin 1、forkJoinPool 通过他来执行 2、计算任务 forkJoinPool.execute(ForkJoinTask task) 3、计算要继承forkJoinTask package ForkJoinA; import ja
阅读全文
摘要:##CompletableFuture.runAsync 异步任务 //外派一个可能阻塞的任务,另外执行,自己先执行其他任务,后面再get回任务结果 ** CompletableFuture completableFuture = CompletableFuture.supplyAsync(()->
阅读全文
摘要:##ambda表达式、链式编程、函数式接口、Stream流计算综合 题目要求:一分钟内完成此题,只能用一行代码实现!现在有5个用户!筛选: 1、ID必须是偶数 2、年龄必须大于23岁 3、用户名转为大写字母 4、用户名字母倒着排序 5、只输出一个用户 package StreamA; import
阅读全文
摘要:##四大函数式接口Function/predicate/Supplier/Consumer Supplier 供给型接口,没有输入参数,只有返回值 predicate 断定性接口:有一个输入参数,返回布尔值 Consumer 消费型接口:只有输入,没有返回值 Function 函数型接口,只有一个参
阅读全文
摘要:##Executors--线程池三大方法,七大参数,4大拒绝策略 七大参数 ExecutorService threadPool = new ThreadPoolExecutor( 2,//默认核心线程数 5,//最大线程数 3,//实际线程量小于默认+阻塞,多久就恢复释放最大线程到默认线程 Tim
阅读全文
摘要:SynchronousQueue *同步队列 和其他的BlockingQueue不一样 SynchronousQueue不存储元素 put一个元素,必须先取出来,否则不能再put元素进去 package SynchronousQueueA; import java.util.concurrent.B
阅读全文
摘要:阻塞队列4组api | 方式 | 抛出异常 | 有返回值,不抛出异常 | 阻塞 等待 | 阻塞超时 | | | | | | | | 添加 | add | offer() | put() | offer(e,long time,TimeUnit) | | 移除 | remove | poll() |
阅读全文
摘要:##阻塞队列 ####2种不得不阻塞的情况 队列满了,阻塞写入,等待移除 队列空了,阻塞移除,等待写入 ####队列使用: 添加 移除 什么情况下我们会使用阻塞队列:多线程并发处理,线程池! 4组API 抛出异常 不抛出异常 阻塞等待 超时等待
阅读全文
摘要:###ReentrantReadWriteLock//读写锁, 只能单线程写,允许多线程读 ReadWriteLock 读-读可以共存! 读-写不能共存! 写-写不能共存! package Lock; import java.util.HashMap; import java.util.Map; i
阅读全文
摘要:###+1计数器CyclicBarrier package add; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; /**CyclicBarrier +1计
阅读全文
摘要:##callable 有缓存 结果可能会阻塞 public interface Callable 一个任务,返回一个结果,可能会抛出一个异常。自定义一个方法不带参数调用 call()。 Runnable Callable界面相似,两者都是设计类的实例可能被另一个线程执行。然而,Runnable不返回
阅读全文
摘要:##并发下的list不安全 CopyOnWriteArrayList/Vector *List list = new ArrayList<>(); >ConcurrentModificationException 并发修改异常 *方案1:List list = new Vector<>(); *方案
阅读全文
摘要:###8锁问题 1。1个phone类对象2synchronized方法,同时执行A/B线程?结果:先A,后B? // synchronized锁的对象是方法的调用者! //两个方法用的是同一个锁(phone对象),谁先拿到谁执行! 2。1个phone类对象2synchronized方法,同时执行A/
阅读全文
摘要:##Synchronized和lock的区别 Synchronized和lock的区别 1、Synchronized 内置的Java关键字,Lock是一个Java类 2、Synchronized 无法判断获取锁的状态,Lock 可以判断是否获取到了锁 3、Synchronized 会自动释放锁,lo
阅读全文
摘要:1.什么是JUC java.util 工具包 包、类 业务:普通的线程代码 Thread Runnable 没有返回值,效率相对callable要低 2.线程和进程 进程:一个程序。 (qq.exe,music,程序的集合) 一个进程往往包含多个线程,至少包含一个 java默认有几个线程?2个: m
阅读全文
1