
并发编程
文章平均质量分 92
kobe_yang24
talk is cheap!show your code.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Volatile关键字与内存可见性、顺序性问题
MESI协议是基础,但Store Buffer和Invalidation Queue的引入使得 缓存一致性≠内存可见性。内存屏障是桥梁:通过约束指令顺序和队列处理,将缓存一致性提升为内存可见性。Volatile是Java语言层抽象:其语义通过内存屏障实现,但开发者无需关注底层细节,只需理解Happens-Before规则。原创 2025-03-15 16:57:51 · 967 阅读 · 0 评论 -
多线程基础
多线程基础1.为什么有多线程摩尔定律的失效:软件工程师们所用的“面向摩尔定律编程”的套路越来越用不下去了。“写程序不考虑性能,等明年 CPU 性能提升一倍,到时候性能自然就不成问题了”,这种想法已经不可行了。阿姆达尔定律: 通过并行增加性能并行优化:出现多核cpu、分布式等等。2.java线程的创建过程如下所示,java线程的创建其实是和OS线程进行绑定的,所以java线程的创建和销毁的开销其实是很大的。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-29tUi原创 2020-12-14 09:56:02 · 161 阅读 · 0 评论 -
并发编程(三)CompletableFuturer
CompletableFuturer**异步化:**并行方案得以实施的基础,利用多线程优化性能这个核心方案得以实施的基础。为什么用CompletableFuturer?不需要手动维护线程,没有繁琐的手工维护线程的工作。语义清晰代码简单并且专注于业务task is cheap show your code!package com.zy.concurrent.future;imp...原创 2019-06-22 11:43:44 · 328 阅读 · 0 评论 -
并发编程(一)Executor
并发编程(一)Executor1.1. 为什么需要线程池?线程池是一个重量级别的对象,所以应该避免频繁的创建和销毁。创建一个线程不仅仅需要在jvm的堆里边分配一块内存,还需要调度操作系统内核的api,操作系统需要给线程分配一系列的资源。线程池解决的问题:解决线程的频繁创建和销毁。1.2. 线程池是什么线程池就是一个创建线程的池子,但是它不同于我们常见的池化资源。线程池是一个生产者消...原创 2019-06-26 23:00:58 · 349 阅读 · 0 评论 -
并发编程(二) Future
并发编程(二) Future1.1 Future是什么?异步任务中我们需要知道的两个重要属性是任务什么时候结束?任务的结果是什么?ThreadPoolExecutor提交任务的方法有如下几个:<T> Future<T> submit(Callable<T> task);<T> Future<T> submit(Runn...原创 2019-06-26 23:01:36 · 488 阅读 · 0 评论 -
并发编程(四)CompletionService
并发编程(四)CompletionService1.1 什么是CompletionService简单的并行任务我们直接使用线程池各自提交任务就可以了,需要获取结果的或者线程之间有依赖关系的我们可以使用Future,当然对于复杂的关系例如线程之间的串行,并行,聚合等关系,java也提供了ComplableFuture来简化我们对线程的操作。CompletionService java提供的一种...原创 2019-06-26 23:02:15 · 627 阅读 · 0 评论 -
并发编程(五)Fork/Join
并发编程(五)Fork/JoinFrok/Join模型主要为了处理分治任务。什么事分治思想?其实就是分而治之,将大的任务分解成无数个小的任务,直到子问题可以直接求出结果为止。分治思想的条件就是大任务和小任务除了数据量不一样之外,其他的都是一摸一样的。分治思想的问题,基本上都会用递归来实现。1.1 java并发包中的并行计算框架 Fork/Join分治任务模型主要分为分解和合并。对应的...原创 2019-06-27 23:30:08 · 553 阅读 · 0 评论