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