concurrent
重生之我是一名程序员
IN IT && WIN IT !
展开
-
CompletableFuture - thenApply()和thenCompose()的区别
【代码】CompletableFuture - thenApply()和thenCompose()的区别。转载 2023-06-26 09:31:04 · 926 阅读 · 0 评论 -
java 并发 - 锁集合
java 并发 - 锁集合名称示例乐观锁悲观锁独占锁共享锁公平锁new ReentrantLock(true)非公平锁new ReentrantLock(false)自旋锁重入锁synchronized乐观锁、悲观锁悲观锁指对 数据被外界修改持保守态度 ,认为数据 很容易就会被其他线 程修改 ,所以在数据被处理前先对数据进行加锁,并在整个数据处理过程中,使数据处于锁定状态悲观锁的 实 现往往依 靠数据库提供 的锁机制转载 2021-10-04 14:18:18 · 277 阅读 · 0 评论 -
并发基础 - 伪共享
并发基础 - 伪共享高速缓存为什么需要高速缓存?解决 主内存与 CPU 之间的速度差异一般计算机有两级高速缓存一般被集成到CPU内部高速缓存由缓存行组成当 CPU 访问某个变量 时,首先会去看 CPU Cache 内是否有该变量,如果有则直接从中获取,否则就去主内存里面获取该变 量什么是伪共享定义当多 个线程同时修改 一 个缓存行里面的多个变 量 时,由于同时只能有 一 个线程操作 缓存行 ,所以相比将 每个变量放到 一 个缓存行,性能会有所下降,这就是伪共享如图变量 x转载 2021-09-29 21:53:12 · 63 阅读 · 0 评论 -
java 并发- synchronized 关键字缺陷
synchronized 关键字缺陷无法控制阻塞时间因争夺某个monitor的锁进入阻塞状态,那么它是无法中断的举例public class SynchronizedDetect { public synchronized void detect() { try { System.out.println(Thread.currentThread().getName() + " detect.."); TimeUnit.H转载 2021-09-26 08:34:40 · 122 阅读 · 1 评论 -
java并发 - CAS
java并发 - CASCAS 即 Compa re and Swap ,其是 JDK 提供的非阻塞原子性操作 , 它通过硬件保证了比较-更新操作的原子性原理CAS 实现的机制就是 使用Unsafe 类boolean compareAndSwapLong(Object obj ,long valueOffset,long expect, long update)方法 : 其中 compareAndSwap 的意 思 是 比 较并交换。 CAS 有四 个操作数 , 分别为 : 对象内存位置转载 2021-06-14 11:21:16 · 145 阅读 · 0 评论 -
java多线程-线程上下文加载器
java多线程-线程上下文加载器获取线程上下文加载器public class App { public static void main(String[] args) { System.out.println(Thread.currentThread().getContextClassLoader()); }}结果:jdk.internal.loader.ClassLoaders$AppClassLoader@659e0bfd为什么需要线程上转载 2021-05-05 21:38:09 · 155 阅读 · 0 评论 -
java多线程-类初始化场景
java多线程-类初始化场景摘自《JVM高级特性与最佳实践》java 必须立即对类进行“初始化” 的场景遇到 new、getstatic、putstatic或invokestatic 这四条字节码指令时,如果类型没有进行过初始化,则需要先触发其初始化阶段。能够生成这四条指令的典型Java代码场景有:使用new关键字实例化对象的时候读取或设置一个类型的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)的时候调用一个类型的静态方法的时候。使用 java.lang.r转载 2021-05-05 16:55:48 · 216 阅读 · 0 评论 -
java多线程-类的加载过程
java多线程-类的加载过程类的加载过程分为三个阶段: 加载,连接,初始化加载: 查找并加载二进制类文件,即 class 文件;连接阶段:验证: 保证加载的 class 文件的正确性, 如魔术因子,文件格式验证、元数据验证、字节码验证和符号引用验证准备: 为类的静态变量分配内存, 并且为其初始化默认值解析: 把类的符号引用转换成直接引用初始化: 为类的静态变量赋值,初始化阶段就是执行类构造器 <clinit>()方法的过程解析符号引用和直接引用符号引用(Sy转载 2021-05-05 16:54:40 · 447 阅读 · 0 评论 -
CompletionService使用
CompletionService使用接口CompletionService的功能是以异步的方式一边生产新的任务,一边处理已完成的任务的结果。这样可以将执行任务与处理处理分离开来处理。使用submit执行任务,使用take取得已经完成的任务CompletionService,内部使用Executor框架和BlockingQueue来实现的public class MyCallable i...转载 2019-04-06 17:49:47 · 1994 阅读 · 0 评论 -
CopyOnWriteArrayList(写时copy的ArrayList)
CopyOnWriteArrayList(写时copy的ArrayList)因为ArrayList采用的是fail-fast机制,在迭代遍历的过程中,如果list的结构发生了变化[structurally modified],一般形如add,remove,clear操作,就会抛出ConcurrentModificationException,是线程不安全的,相反的,CopyOnWriteArr...转载 2018-03-21 15:21:23 · 3680 阅读 · 4 评论