![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发与多线程
文章平均质量分 89
少年做自己的英雄
奋斗吧 少年
展开
-
Java常用锁及源码实现分析
常用锁乐观锁(无锁) Lock(显示锁) synchronized(内置锁)乐观锁实现方式:CAS(compare and swap:比较并交换),就是在更新一个变量之前,先获取这个变量是否和预期相等,如果相等则更新,否则什么也不做。例如:数据库更新:update user set name=xxx where xxx=xxx,只有当where符合条件才更新,否则什么也不做。 Atomic操作AtomicInteger底层源码我们在多线程并发i++时,通常会使用atomicIn原创 2021-06-28 01:18:08 · 442 阅读 · 1 评论 -
理解AQS(AbstractQueuedSynchronizer)源代码分析
java.util.concurrent.locks下public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable {/** * The synchronization state. */ private volatile int state;}其继承的原创 2021-06-28 01:16:39 · 177 阅读 · 1 评论 -
synchronized锁的膨胀过程
在jdk1.6以前,随着并发数提高,synchronized吞吐量下降严重,而ReentrantLock则比较稳定,如果说ReentrantLock性能较强,那么synchronizedzeyuo原创 2021-06-20 20:55:41 · 703 阅读 · 0 评论 -
Java内存模型与线程
由于内存和CPU的读写速度有断崖式差距,于是在内存与CPU之间增加了一层高速缓存,以缓解CPU想要数据时内存供不应求的尴尬场面。在CPU需要时将使用到的数据复制到缓存中,提高运算速度,运算结束后将结果同步...原创 2021-06-20 15:18:00 · 227 阅读 · 0 评论 -
Java线程通信及线程虚假唤醒
线程在内部运行时,线程调度具有一定的透明性,程序通常无法控制线程的轮换执行。但Java本身提供了一些机制来保证线程协调运行。假设目前系统中有两个线程,分别代表存款和取钱。原创 2021-06-14 20:42:14 · 190 阅读 · 1 评论 -
解决ThreadLocal在开启子线程时,父线程向子线程值传递问题,源码分析
public static void main(String[] args) throws Exception { ThreadLocal<String> threadLocal = new ThreadLocal<>(); threadLocal.set("初始化的值能继承吗?"); System.out.printl...原创 2020-02-18 21:45:13 · 3410 阅读 · 1 评论 -
为什么使用多线程?
1、概念进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。线程:线程,有时被称为轻量进程,是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥...原创 2018-11-15 23:00:24 · 252 阅读 · 0 评论 -
线程池的使用场景以及java中ThreadPoolExecutor类的讲解
目录为什么要使用线程池?Java中的线程池workQueue参数分析handler参数分析execute方法与submit方法合理的选择线程池大小为什么要使用线程池?对于java初学者来说,首先接触到的创建线程的方法就是new Thread,或者实现Runnable接口,重写run方法来实现多线程。虽然简单,但是一句话:谁来帮你管理线程???若不使用线程池:...原创 2018-11-22 00:01:02 · 9498 阅读 · 7 评论 -
ThreadLocal使用场景、源码分析及存在问题
ThreadLocal使用场景并发编程中存在两种情况:1、所有线程共享一个变量,且任意一线程对该变量的执行结果的改变会影响其他线程,此种情况下需对该变量加锁,防止脏数据的产生。(例如:多窗口购买火车票,每个窗口的火车票剩余数量的改变会直接影响其他窗口)2、所有线程用一个变量名,但各个线程对该变量结果的改变不影响其他线程,使改变的结果保持在当前线程内。例如我整个项目每个方法都会用到use...原创 2019-01-14 18:15:00 · 674 阅读 · 0 评论