并发编程
文章平均质量分 65
我们一直在路上
这个作者很懒,什么都没留下…
展开
-
Java synchronized偏向锁后hashcode存在哪里?
XX关闭延时。hashcode是懒加载,在调用hashCode方法后才会保存在对象头中。当对象头中没有hashcode时,对象头锁的状态是可偏向(biasable,101,且无线程id)。如果在同步代码块之前调用hashCode方法,则对象头中会有hashcode,且锁状态是不可偏向(001),这时候再执行同步代码块,锁直接是轻量级锁(thinlock,00)。如果是在同步代码块中执行hashcode,则锁是从偏向锁直接膨胀为重量级锁。Java技能树集合41328。...转载 2022-07-22 11:23:25 · 974 阅读 · 3 评论 -
浅谈tomcat线程池
正确的应用场景+合适的线程数量 = 快速运行速度Tomcat是目前比较流行的 Web 容器,接受请求之后都会转交给线程池处理,这样可以有效提高处理的能力与并发度经典老题: 创建线程池时应该给多大的核心线程数,最大线程数?抛开场景谈线程数都是耍流氓,场景的话 一般分为IO密集型与CPU密集型,也就是线程的大部分时间将用来计算还是等待IO一个原则就是,如果IO密集型,线程大部分时间用来等待IO结果,例如查数据库这种操作,线程等待IO结果CPU是空闲可以处理其他事情的,这样场景鼓励多创建线程并发执行如果是CP转载 2022-07-05 19:17:25 · 515 阅读 · 0 评论 -
三个线程依次顺序执行
2.线程池newSingleThreadExecutor 里面只有1个线程,依次执行run方法原创 2022-07-05 19:04:15 · 277 阅读 · 0 评论 -
CompletableFuture 方法总结
纯消费类型的方法,指依赖上一个异步任务的结果作为当前函数的参数进行下一步计算,它的特点是不返回新的计算值,这类的方法都包含 Accept 这个关键字。在CompletionStage中包含9个Accept关键字的方法,这9个方法又可以分为三类:依赖单个CompletionStage任务完成,依赖两个CompletionStage任务都完成,依赖两个CompletionStage中的任何一个完成。例子thenAcceptBothAsync 拿到supplyAsync方法和completableFuture原创 2022-07-05 18:07:22 · 702 阅读 · 0 评论 -
12.ConcurrentHashMap源码分析
并发编程(1)-java中的6中线程状态并发编程(2)-怎么中断线程?并发编程(3)-synchronized的实现原理并发编程(4)-深入理解volatile关键字并发编程(5)-ReentrantLock源码分析并发编程(6)-Condition源码分析并发编程(7)-juc阻塞队列介绍并发编程(8)-什么是异步责任链并发编程(9)-Semaphore介绍和源码分析并发编程(10)-CyclicBarrier的使用及其源码分析并发编程(11)-forkJoin基本使用一、为什么要用原创 2022-05-17 16:00:45 · 635 阅读 · 0 评论 -
缓存一致性协议与伪共享问题
https://blog.csdn.net/weixin_53794227/article/details/124435514转载 2022-05-16 21:48:01 · 149 阅读 · 0 评论 -
11.forkJoin基本使用
并发编程(1)-java中的6中线程状态并发编程(2)-怎么中断线程?并发编程(3)-synchronized的实现原理并发编程(4)-深入理解volatile关键字并发编程(5)-ReentrantLock源码分析并发编程(6)-Condition源码分析并发编程(7)-juc阻塞队列介绍并发编程(8)-什么是异步责任链并发编程(9)-Semaphore介绍和源码分析并发编程(10)-CyclicBarrier的使用及其源码分析一 案例public class ForkJoinExa原创 2022-05-11 21:08:37 · 438 阅读 · 0 评论 -
10. CyclicBarrier的使用及其源码分析
一、 CyclicBarrier的使用public class CyclicBarrierDemo { static class RunTask implements Runnable { private CyclicBarrier cyclicBarrier; public RunTask(CyclicBarrier cyclicBarrier) { this.cyclicBarrier = cyclicBarrier;原创 2022-04-24 19:01:30 · 257 阅读 · 0 评论 -
9.Semaphore介绍和源码分析
并发编程(1)-java中的6中线程状态并发编程(2)-怎么中断线程?并发编程(3)-synchronized的实现原理并发编程(4)-深入理解volatile关键字并发编程(5)-ReentrantLock源码分析并发编程(6)-Condition源码分析并发编程(7)-juc阻塞队列介绍并发编程(8)-什么是异步责任链一、Semaphore介绍和使用信号灯.限流器,限制资源的访问.本质上: 抢占一个令牌. -> 如果抢占到令牌,就通行, 否则,就阻塞!acquire() 抢占原创 2022-04-24 17:32:09 · 244 阅读 · 0 评论 -
8.什么是异步责任链?
并发编程(1)-java中的6中线程状态并发编程(2)-怎么中断线程?并发编程(3)-synchronized的实现原理并发编程(4)-深入理解volatile关键字并发编程(5)-ReentrantLock源码分析并发编程(6)-Condition源码分析并发编程(6)-7.juc阻塞队列介绍一、普通责任链@Datapublic class Request { private String name;}@Datapublic interface BaseHandle原创 2022-04-24 16:57:58 · 593 阅读 · 0 评论 -
7.juc阻塞队列介绍
并发编程学习目录并发编程(1)-java中的6中线程状态并发编程(2)-怎么中断线程?并发编程(3)-synchronized的实现原理并发编程(4)-深入理解volatile关键字并发编程(5)-ReentrantLock源码分析并发编程(6)-Condition源码分析什么叫阻塞队列?队列是一种只允许在一端进行删除操作,在另一端进行插入操作的线性表,允许插入的一端称为队尾、允许删除的一端称为队头。那么阻塞队列,实际上是在队列的基础上增加了两个操作。支持阻塞插入:队列满了的情况下,会阻塞原创 2022-04-22 23:01:59 · 350 阅读 · 0 评论 -
CountDownLatch的理解和使用
https://www.cnblogs.com/Lee_xy_z/p/10470181.html转载 2021-12-22 11:19:04 · 97 阅读 · 0 评论 -
6.并发类Condition源码分析
一、用ReentrantLock加condition完成生产消费者模型在前面学习 synchronized 的时候,有讲到 wait/notify 的基本使用,结合 synchronized 可以实现对线程的通信。那么这个时候我就在思考了,既然 J.U.C 里面提供了锁的实现机制,那 J.U.C 里面有没有提供类似的线程通信的工具呢? 于是找阿找,发现了一个Condition 工具类。Condition 是一个多线程协调通信的工具类,可以让某些线程一起等待某个条件(condition),只有满足条件时,线原创 2020-12-06 03:13:05 · 606 阅读 · 0 评论 -
并发编程(5)-深入理解ReentrantLock原理
并发编程学习目录并发编程(1)-java中的6中线程状态并发编程(2)-怎么中断线程?并发编程(3)-synchronized的实现原理并发编程(4)-深入理解volatile关键字1、ReentrantLock代码实战public class ReentrantLockDemo { private static volatile int count; static List<Thread> threads = new ArrayList<>()原创 2020-08-07 16:26:57 · 1629 阅读 · 0 评论 -
并发编程(4)-深入理解volatile关键字
一、一个思考public class VolatileTest { private static volatile boolean stop = false; public static void main(String[] args) throws InterruptedException { new Thread(()->{ int i = 0; while (!stop) { i++原创 2020-08-02 13:16:14 · 324 阅读 · 0 评论 -
并发编程(3)-synchronized的实现原理
一、synchronized锁是如何存储的1.对象在内存中的布局2.jvm源码实现3.markword4.为什么任何对象都可以实现锁二、synchronized锁升级原创 2020-06-11 15:57:30 · 502 阅读 · 0 评论 -
并发编程(2)-怎么中断线程?
怎么中断一个正在运行的线程 public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(()->{ int i = 0; while (!Thread.currentThread().isInterrupted()) { i++; System.ou原创 2020-06-01 10:47:12 · 224 阅读 · 2 评论 -
并发编程(1)-java中的6种线程状态
新建(new):当创建一个线程时的线程状态运行(run): 运行有2种情况,调用start方法,但是还没有被cpu执行调用,这个时候是就绪。还有一种是正在被cpu调度执行,这个时候是运行。在java中这两种情况都叫**运行状态*。超时等待(TIMED_WAITING):当线程调用wait(long),sleep(long)等方法时,线程会进入这个状态。等待(WAITING):当前成调用wait()等方法时,会进入这个状态。阻塞(BLOCKED):当等待其他线程释放锁时,会进入这个状态。死亡(t..原创 2020-05-28 17:59:29 · 203 阅读 · 0 评论