随笔分类 -  java多线程与并发

1 2 3 下一页

接口性能优化
摘要:一、耗时统计 在做接口的性能优化时,最重要的是知道时间消耗在哪里。 可以用StopWatch,进行耗时统计。 详情见: https://www.cnblogs.com/expiator/p/17045089.html 二、链路追踪 如果团队使用了Skywalking,可以用来进行链路追踪,耗时统计。 阅读全文

posted @ 2023-02-05 23:22 乐之者v 阅读(145) 评论(0) 推荐(0) 编辑

线程池的线程数设置
摘要:线程池的基础知识 如果不了解线程池,可以先看一下基础知识。 详情见: https://www.cnblogs.com/expiator/p/9053754.html 核心线程数设置 IO密集型/CPU密集型的 CPU密集型:核心线程数 = CPU核数 + 1 CPU密集的意思是任务需要大量的运算,而 阅读全文

posted @ 2023-02-02 23:31 乐之者v 阅读(994) 评论(0) 推荐(0) 编辑

CompletableFuture多任务异步,获取返回值,汇总结果
摘要:线程池异步的基础知识 详情见:https://blog.csdn.net/sinat_32502451/article/details/133039624 线程池执行多任务,获取返回值 线程池的 submit()方法,可以提交任务,并返回 Future接口。 而 future.get(),可以获取到 阅读全文

posted @ 2023-01-16 23:58 乐之者v 阅读(14544) 评论(0) 推荐(1) 编辑

RateLimiter限流
摘要:限流算法 https://blog.csdn.net/sinat_32502451/article/details/139223748 注意: RateLimiter限流属于单体版的限流,如果是高并发的分布式系统,需要用分布式限流。 Maven依赖包: <dependency> <groupId>c 阅读全文

posted @ 2022-02-07 18:03 乐之者v 阅读(272) 评论(0) 推荐(0) 编辑

Java8 CompletableFuture处理多个异步任务
摘要:CompletableFuture Java5引入了Future和 FutureTask,用于异步处理。Future可以通过get()方法获取异步的返回值。 在Java8引入了CompletableFuture,CompletableFuture不仅实现了Future接口, 还实现了Completi 阅读全文

posted @ 2021-05-31 15:58 乐之者v 阅读(3070) 评论(0) 推荐(0) 编辑

java8多线程的lambda
摘要:Lambda表达式 lambda表达式,实际上就是匿名函数。 格式如下: ()里面是函数的参数,中间是箭头, 是函数的代码块,包含了函数的执行以及返回结果。 ()->{} 新建线程 不使用lambda: Runnable runnable = new Runnable() { @Override p 阅读全文

posted @ 2021-05-10 17:08 乐之者v 阅读(2664) 评论(0) 推荐(0) 编辑

java线程池异步
摘要:什么时候使用异步? 处理多个任务,某些任务比较耗时,可以用异步。 异步线程 新建一个类,实现Callable接口,重写call()方法。 异步任务的结果,通过call()方法返回。 实现Callable接口,call()结果就返回String类型。Object等其他类型同理。 如果不需要返回结果,可 阅读全文

posted @ 2021-05-10 12:03 乐之者v 阅读(529) 评论(0) 推荐(0) 编辑

ReentrantLock源码简析
摘要:概念 ReentrantLock,可重入锁。在多线程中,可以通过加锁保证线程安全。 加锁和解锁 加锁: public void lock() { sync.lock(); } 解锁 public void unlock() { sync.release(1); } 内部类Sync继承AQS(Abst 阅读全文

posted @ 2020-04-08 20:27 乐之者v 阅读(276) 评论(0) 推荐(0) 编辑

ThreadLocal源码简解
摘要:一、ThreadLocal ThreadLocal,线程副本变量。 ThreadLocal,保证了每个线程都有独立的对象副本,保证了对象的唯一性,可以实现线程安全性。 UML图 如下所示: set(T value) 调用ThreadLocal的set(T value)和get()方法时,内部会使用到 阅读全文

posted @ 2020-01-14 13:50 乐之者v 阅读(290) 评论(0) 推荐(0) 编辑

java线程池源码的理解
摘要:线程池 新建线程和切换线程的开销太大了,使用线程池可以避免频繁的创建和销毁线程,让创建的线程进行复用,节省系统资源。 线程池的关键类:ThreadPoolExecutor。 该类中包含了大量的多线程与并发处理工具,包括ReentrantLock、AtomicInteger、AQS、CAS、Block 阅读全文

posted @ 2019-12-06 00:07 乐之者v 阅读(400) 评论(0) 推荐(1) 编辑

SpringBoot异步及线程池配置
摘要:异步方法注解@Async 在SpringBoot中进行异步处理,可以使用异步注解@Async和@EnableAsync。 @Async注解表示异步,如:@Async("asyncServiceExecutor"), 后面的参数asyncServiceExecutor对应于自定义的线程池配置类(在以下 阅读全文

posted @ 2019-07-03 18:55 乐之者v 阅读(21031) 评论(0) 推荐(1) 编辑

《java并发编程实战》笔记
摘要:《java并发编程实战》这本书配合并发编程网中的并发系列文章一起看,效果会好很多。 并发系列的文章链接为: Java并发性和多线程介绍目录 建议: 《java并发编程实战》第3章和第4章可以暂时先跳过。。这部分内容的文字和概念很多,代码块偏少。不容易看进去。 一、线程1.线程的使用可以提升程序的性能 阅读全文

posted @ 2019-02-17 21:48 乐之者v 阅读(480) 评论(0) 推荐(0) 编辑

java并发:jdk1.8中ConcurrentHashMap源码浅析
摘要:ConcurrentHashMap是线程安全的。可以在多线程中对ConcurrentHashMap进行操作。 在jdk1.7中,使用的是锁分段技术Segment。数据结构是数组+链表。 对比jdk1.7,在jdk1.8中,ConcurrentHashMap主要使用了CAS(compareAndSwa 阅读全文

posted @ 2019-02-17 21:44 乐之者v 阅读(473) 评论(0) 推荐(0) 编辑

java面试题:多线程与并发
摘要:多线程 线程,锁 Q:如何新建一个线程? 继承Thread,或者实现Runnable接口,或者通过Callable接口实现。 Q:Callable有什么区别? Callable接口,有一个call()方法,可以返回值。 Q:讲一下Callable接口、Future接口、FutureTask类 Cal 阅读全文

posted @ 2018-12-28 23:00 乐之者v 阅读(769) 评论(0) 推荐(0) 编辑

Java的Unsafe类
摘要:Java并发包的源码中有着Unsafe类。 Unsafe类是在sun.misc包下,不属于Java标准。但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty、Cassandra、Hadoop、Kafka等。Unsafe类在提升Java运行效率,增强 阅读全文

posted @ 2018-12-13 09:58 乐之者v 阅读(280) 评论(0) 推荐(0) 编辑

java并发:CopyOnWriteArrayList简单理解
摘要:Java集合的快速失败机制 “fail-fast” "fail-fast"是java集合的一种错误检测机制,当多个线程对集合进行结构上的改变的操作时,有可能会产生 fail-fast 机制。 例如:假设存在两个线程(线程1、线程2),线程1通过Iterator在遍历集合A中的元素,在某个时候线程2修 阅读全文

posted @ 2018-12-11 21:32 乐之者v 阅读(1066) 评论(0) 推荐(0) 编辑

java并发:Callable、Future和FutureTask(转载)
摘要:创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,就提供了Callab 阅读全文

posted @ 2018-08-23 21:48 乐之者v 阅读(172) 评论(0) 推荐(0) 编辑

java并发:Semaphore
摘要:Semaphore是常见的同步工具类之一。 Semaphore翻译成字面意思为 信号量,Semaphore可以控制同时访问的线程个数,也称为permit(许可)。 在构造函数中指定permits个数。 可以通过 acquire()方法 获取一个许可,Semephore可用的许可数量减一,如果没有可用 阅读全文

posted @ 2018-08-22 22:56 乐之者v 阅读(247) 评论(0) 推荐(0) 编辑

java线程状态及转换
摘要:java线程有6种状态: 新建线程new,启动线程runnable,阻塞block,限时等待timed_waiting,等待线程waiting,终止线程terminated 1.限时等待timed waiting :处于这种状态的线程不会被分配cpu执行时间。不过无须等待被其他线程显式地唤醒,在一定 阅读全文

posted @ 2018-08-15 15:16 乐之者v 阅读(438) 评论(0) 推荐(0) 编辑

java并发:CAS算法和ABA问题
摘要:CAS算法是硬件对于并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令。 CAS用于管理对共享数据的并发访问。 java的并发包中,AQS、原子操作类等都是基于CAS实现的。 CAS 是一种 无锁的 非阻塞算法的 实现。 CAS(Compare-And-Swap),简单来说就是比较和替换。 阅读全文

posted @ 2018-08-09 17:15 乐之者v 阅读(884) 评论(0) 推荐(0) 编辑

1 2 3 下一页
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示