多线程
文章平均质量分 72
lsz冲呀
奋斗者
展开
-
线程池核心设计与实现
导读 线程池是一种通过“池化”思想,帮助我们管理线程而获取并发性的工具,在Java中的体现是ThreadPoolExecutor类。那么它的的详细设计与实现是什么样的呢? 总体设计 Java中的线程池核心实现类是ThreadPoolExecutor,本章基于JDK 1.8的源码来分析Java线程池的核心设计与实现。我们首先来看一下ThreadPoolExecutor的UML类图,了解下ThreadPoolExecutor的继承关系。 ThreadPoolExecutor实现的顶层接口是Executor,顶转载 2022-05-10 13:12:45 · 174 阅读 · 0 评论 -
ThreadLocal 常见使用场景
ThreadLocal 之前一篇文章我已经和大家探讨了ThreadLocal的实现原理,并分析了源码,现在这篇文章带大家了解一下其常见的使用场景,在最近的项目中我也用到了。首先复习下其包含的四个方法: void set(Object value) // 设置当前线程的线程局部变量的值。 public Object get() // 该方法返回当前线程所对应的线程局部变量。 public void remove()// 将当前线程局部变量的值删除,其目的是为了减少内存使用,加快内存回收。 protected原创 2022-04-06 20:56:20 · 7157 阅读 · 1 评论 -
ThreadLocal 原理分析
关于ThreadLocal JDK1.2的版本中就提供java.lang.ThreadLocal类,每一个ThreadLocal能够放一个线程级别的变量, 它本身能够被多个线程共享使用,并且又能够达到线程安全的目的,且绝对线程安全。也就是说,ThreadLocal是保存当前线程的变量,当前线程内,可以任意获取,但每个线程往ThreadLocal中读写数据是线程隔离,互不影响。 ThreadLocal包含了四个方法: void set(Object value) // 设置当前线程的线程局部变量的值。 pub原创 2022-04-06 20:40:58 · 580 阅读 · 0 评论 -
Java I/O模型
IO 模型分类 IO 模型一共有 5 种: 同步阻塞 I/O 同步非阻塞 I/O I/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) BIO BIO 属于同步阻塞 IO 模型 。 同步阻塞 IO 模型中,应用程序发起 read 调用后,会一直阻塞,直到内核把数据拷贝到用户空间。原创 2022-04-05 22:08:04 · 117 阅读 · 0 评论 -
如何合理设置线程池大小
问题 线程是一种稀缺的资源,,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,因此出现了线程池,来进行统一的分配、调度与监控。但是问题来了,如何有效的合理配置线程池呢?今天我们来讨论这个问题。 合理的配置线程池 要想合理的配置线程池的大小,首先得分析任务的特性,可以从以下几个角度分析: 任务的性质:CPU密集型任务、IO密集型任务、混合型任务。 任务的优先级:高、中、低。 任务的执行时间:长、中、短。 任务的依赖性:是否依赖其他系统资源,如数据库连接等。 性质不同的任务可以交给不同规模的线程池原创 2022-04-05 20:24:41 · 2827 阅读 · 0 评论 -
Volatile关键词
volatile特性 内存可见性:通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。 volatile的使用场景 通过关键字sychronize可以防止多个线程进入同一段代码,在某些特定场景中,volatile相当于一个轻量级的sychronize,因为不会引起线程的上下文切换,但是使用volatile必须满足两个条件: 对变量的写操作不依赖当前值,如多线程下执行a++,是无法通过volatile保证结果准确性的; 该变量没有原创 2022-03-21 23:48:37 · 88 阅读 · 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 · 83 阅读 · 0 评论 -
并发编程基础Ⅰ
多线程使用场景 通过并行计算提高程序执行性能 需要等待网络、I/O 响应导致耗费大量的执行时间,可以采用异步线程的方式来减少阻塞 线程的实现方式 在 Java 中,有多种方式来实现多线程。继承 Thread 类、实现 Runnable 接口、使用 ExecutorService、Callable、Future 实现带返回结果的多线程。如果不需要获取线程的返回结果,推荐使用实现 Runnable 接口的方式。 1.继承 Thread 类创建线程 public class ThreadDemo extend原创 2022-03-08 23:51:09 · 68 阅读 · 0 评论