
多线程
文章平均质量分 72
lsz冲呀
奋斗者
展开
-
线程池核心设计与实现
导读线程池是一种通过“池化”思想,帮助我们管理线程而获取并发性的工具,在Java中的体现是ThreadPoolExecutor类。那么它的的详细设计与实现是什么样的呢?总体设计Java中的线程池核心实现类是ThreadPoolExecutor,本章基于JDK 1.8的源码来分析Java线程池的核心设计与实现。我们首先来看一下ThreadPoolExecutor的UML类图,了解下ThreadPoolExecutor的继承关系。ThreadPoolExecutor实现的顶层接口是Executor,顶转载 2022-05-10 13:12:45 · 196 阅读 · 0 评论 -
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 评论 -
如何合理设置线程池大小
问题线程是一种稀缺的资源,,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,因此出现了线程池,来进行统一的分配、调度与监控。但是问题来了,如何有效的合理配置线程池呢?今天我们来讨论这个问题。合理的配置线程池要想合理的配置线程池的大小,首先得分析任务的特性,可以从以下几个角度分析:任务的性质:CPU密集型任务、IO密集型任务、混合型任务。任务的优先级:高、中、低。任务的执行时间:长、中、短。任务的依赖性:是否依赖其他系统资源,如数据库连接等。性质不同的任务可以交给不同规模的线程池原创 2022-04-05 20:24:41 · 2865 阅读 · 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 评论 -
并发编程基础Ⅰ
多线程使用场景通过并行计算提高程序执行性能需要等待网络、I/O 响应导致耗费大量的执行时间,可以采用异步线程的方式来减少阻塞线程的实现方式在 Java 中,有多种方式来实现多线程。继承 Thread 类、实现 Runnable 接口、使用 ExecutorService、Callable、Future 实现带返回结果的多线程。如果不需要获取线程的返回结果,推荐使用实现 Runnable 接口的方式。1.继承 Thread 类创建线程public class ThreadDemo extend原创 2022-03-08 23:51:09 · 75 阅读 · 0 评论