随笔分类 - 并发编程
摘要:线程池介绍 线程池(thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,对线程统一管理。 线程池就是存放线程的池子,池子里存放了很多可以复用的线程。 创建线程和销毁线程的花销是比较大的(手动new Thread 类),创建和消耗线
阅读全文
摘要:1、什么是原子操作类 原子性:无论有多少个操作,只要我们将这部分操作通过加锁的形式进行锁定,那么就可以视为一个原子性操作。原子性操作 = 线程安全。 原子操作类:提供了可以保证我们线程安全的类。可以直接使用。 当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量i=1,A
阅读全文
摘要:0、什么是Lock锁 java.util.concurrent.locks.Lock 是一个类似于synchronized 块的线程同步机制。但是 Lock比 synchronized 块更加灵活。Lock是个接口,有个实现类是ReentrantLock。 1、自定义Lock锁 当我们在学习Lock
阅读全文
摘要:1、Volatile 定义 在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatil
阅读全文
摘要:0、为什么要有内存模型? 想要回答这个问题,需要先弄懂传统计算机硬件内存架构。 0.1 硬件内存架构 (1)CPU:一般服务器上有多个CPU,每个CPU有多个核,这就意味着多个cpu或者多个核可以并发工作 (2)CPU Register:CPU寄存器,是CPU内部集成的,在寄存器上执行操作的效率要比
阅读全文
摘要:为什么需要使用锁?因为CPU在共享时,在临界区会由于操作指令交错而出现实际结果与目标结果不符的问题。 一个程序运行多个线程本身是没有问题的。问题出现在多个线程访问共享资源时,读写操作发生指令交错。 一段代码块中,如果存在对共享资源的多线程读写操作,这称这段代码为临界区,也叫同步代码块。 例如: st
阅读全文
摘要:1、Java——天生的多线程 在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉到这些线程在同时执行。 当前的main函数就是一个 JVM 进程。 打印出来的 6 条线程信息就是进程中的多条线程。 示例
阅读全文
摘要:一、进程 1、概述 进程:程序是静止的,程序实体的运行过程就是进程,是系统进行资源分配的基本单位 进程的特征:并发性、异步性、动态性、独立性、结构性 线程:线程是属于进程的,是一个基本的 CPU 执行单元,是程序执行流的最小单元。线程是进程中的一个实体,是系统独立调度的基本单位,线程本身不拥有系统资
阅读全文