JUC
文章平均质量分 93
linsy`
世上并无常青树,心中不负便胜朝朝暮暮
展开
-
源码分析CompletableFuture使用默认线程池ForkJoinPool的弊端(cpu利用率低)
假如有20CompletableFuture任务并发执行时,都使用默认线程池ForkJoinPool,但cpu的核心数又小于3,那么就会新建20个线程(不使用默认线程池了),这20个线程相互竞争cpu资源和内存,很多线程都在等待,浪费了大量的性能在线程上下文切换上。原创 2023-08-23 19:46:05 · 1040 阅读 · 0 评论 -
Synchronized锁升级(偏向锁、轻量锁、重量锁)
高并发时,同步调用应该考虑到锁的性能消耗。能用无锁的数据结构,就不要用锁;能锁区块,就不要锁整个方法体;能使用对象锁,就不用类锁。原创 2023-03-21 23:02:56 · 860 阅读 · 0 评论 -
JUC并发编程
处理器的读写速度远远大于内存,中间一般设有高速缓存区,现阶段一般windows电脑就有三级缓存。作用:屏蔽各种硬件和操作系统的内存访问差异。JMM:java内存模型,本身是一种抽象的概念,并不正是存在,它仅仅是描述的一组预定与规范。通过这组规范定义程序中各个变量的读写访问方式并对共享变量的写入何时/如何编程对另一个线程可见。关键技术点都是围绕多线程的原子性、可见性、有序性展开。能干嘛?通过JMM 来实现线程和主内存之间的抽象关系。原创 2023-03-15 17:45:18 · 113 阅读 · 0 评论 -
JUC初体验
实际开发中不用上面三种方式创建线程池,而是自定义。FixedThreadPool和SingleThreadPool:允许请求队列的长度为 Integer.MAX_VALUE,面临大量请求会导致OOM。CachedThreadPool 和 SingleThreadPool:允许创建线程数量为Integer.MAX_VALUE,可能会创建大量线程,从而导致OOM。原创 2022-10-23 21:02:14 · 202 阅读 · 0 评论