
并发编程
文章平均质量分 76
lsz冲呀
奋斗者
展开
-
线程池结合SpringBoot
导读什么是线程池线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。创建线程本身开销大,反复创建并销毁,过多的占用内存。所以有大量线程创建考虑使用线程池。线程池不用反复创建线程达到线程的复用,更具配置合理利用cpu和内存减少了开销,性能会得到提高,还能统一管理任务比如服务器收到大量请求,每个请求都分配线程去处理,对服务器性能考验就比较大,如果创建5个以上线程考虑使用线程池。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等原创 2022-05-09 16:59:13 · 1282 阅读 · 1 评论 -
ThreadLocal 常见使用场景
ThreadLocal之前一篇文章我已经和大家探讨了ThreadLocal的实现原理,并分析了源码,现在这篇文章带大家了解一下其常见的使用场景,在最近的项目中我也用到了。首先复习下其包含的四个方法:void set(Object value) // 设置当前线程的线程局部变量的值。public Object get() // 该方法返回当前线程所对应的线程局部变量。public void remove()// 将当前线程局部变量的值删除,其目的是为了减少内存使用,加快内存回收。protected原创 2022-04-06 20:56:20 · 7240 阅读 · 1 评论 -
ThreadLocal 原理分析
关于ThreadLocalJDK1.2的版本中就提供java.lang.ThreadLocal类,每一个ThreadLocal能够放一个线程级别的变量, 它本身能够被多个线程共享使用,并且又能够达到线程安全的目的,且绝对线程安全。也就是说,ThreadLocal是保存当前线程的变量,当前线程内,可以任意获取,但每个线程往ThreadLocal中读写数据是线程隔离,互不影响。ThreadLocal包含了四个方法:void set(Object value) // 设置当前线程的线程局部变量的值。pub原创 2022-04-06 20:40:58 · 610 阅读 · 0 评论 -
Java I/O模型
IO 模型分类IO 模型一共有 5 种:同步阻塞 I/O同步非阻塞 I/OI/O 多路复用信号驱动 I/O异步 I/O。这也是我们经常提到的 5 种 I/O 模型。Java 中 3 种常见 I/O 模型BIO (Blocking I/O)NIO (Non-blocking/New I/O)AIO (Asynchronous I/O)BIOBIO 属于同步阻塞 IO 模型 。同步阻塞 IO 模型中,应用程序发起 read 调用后,会一直阻塞,直到内核把数据拷贝到用户空间。原创 2022-04-05 22:08:04 · 137 阅读 · 0 评论 -
Volatile关键词
volatile特性内存可见性:通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。volatile的使用场景通过关键字sychronize可以防止多个线程进入同一段代码,在某些特定场景中,volatile相当于一个轻量级的sychronize,因为不会引起线程的上下文切换,但是使用volatile必须满足两个条件:对变量的写操作不依赖当前值,如多线程下执行a++,是无法通过volatile保证结果准确性的;该变量没有原创 2022-03-21 23:48:37 · 105 阅读 · 0 评论 -
缓存一致性
CPU高速缓存在介绍缓存一致性问题之前,要先了解CPU的高速缓存。缓存一致性问题CPU 高速缓存的引入导致了缓存一致性问题,CPU-0 读取主存的数据,缓存到 CPU-0 的高速缓存中,CPU-1 也做了同样的事情,而 CPU-1 把 count 的值修改成了 2,并且同步到 CPU-1 的高速缓存,但是这个修改以后的值并没有写入到主存中,CPU-0 访问该字节,由于缓存没有更新,所以仍然是之前的值,就会导致数据不一致的问题引发这个问题的原因是因为多核心 CPU 情况下存在指令并行执行,而各个 CP转载 2022-03-20 23:53:29 · 95 阅读 · 0 评论 -
java 单例模式
什么单例模式因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计。单例模式的特点单例模式只能有一个实例。单例类必须创建自己的唯一实例。单例类必须向其他对象提供这一实例。看到这里,大家可能会问,这和静态类有什么区别吗?首先理解一下什么是静态类,静态类就是一个类里面都是静态方法和静态field,构造器被private修饰,因此不能被实例化。Math类就是一个静态类。两者的主要区别如下:1)首先单例模式会提供给你一个全局唯一的对原创 2022-03-20 00:24:28 · 107 阅读 · 0 评论 -
Java 内存模型(JMM)
JMM 定义内存模型定义了共享内存系统中多线程程序读写操作行为的规范,来屏蔽各种硬件和操作系统的内存访问差异,来实现 Java 程序在各个平台下都能达到一致的内存访问效果。Java 内存模型的主要目标是定义程序中各个变量的访问规则,也就是在虚拟机中将变量存储到内存以及从内存中取出变量(这里的变量,指的是共享变量,也就是实例对象、静态字段、数组对象等存储在堆内存中的变量。而对于局部变量这类的,属于线程私有,不会被共享)这类的底层细节。通过这些规则来规范对内存的读写操作,从而保证指令执行的正确性。原创 2022-03-19 00:15:41 · 317 阅读 · 0 评论