Java并发
文章平均质量分 86
涛歌依旧fly
计算机研究生,专注于Java后端技术学习。
——勇敢地奔跑
展开
-
【汇总篇】
汇总原创 2022-07-22 13:48:52 · 81 阅读 · 0 评论 -
一、Java并发-基本概念和线程的创建
上下文切换内核为每一个进程维持一个上下文。**上下文就是内核重新启动一个被抢占的进程所需的状态。**包括以下内容:进程切换和线程切换的主要区别最主要的一个区别在于进程切换涉及虚拟地址空间的切换而线程不会。因为每个进程都有自己的虚拟地址空间,而线程是共享所在进程的虚拟地址空间的,因此同一个进程中的线程进行线程切换时不涉及虚拟地址空间的转换页表查找是一个很慢的过程,因此通常使用cache来缓存常用的地址映射,这样可以加速页表查找,这个cache就是快表TLB(translation Lookaside Buff原创 2022-07-15 09:20:56 · 130 阅读 · 0 评论 -
三、Java并发-共享模型之管程
;System.out.println("想要得到结果");System.out.println("结果是}System.out.println("得到结果");System.out.println("设置结果");/***要返回的结果//优雅地使用wait/notifypublicObjectgetResponse(){//如果返回结果为空就一直等待,避免虚假唤醒while(response==null){try{........................原创 2022-07-15 09:48:01 · 508 阅读 · 0 评论 -
四、Java并发-共享模型之内存
共享模型原创 2022-07-15 09:58:31 · 625 阅读 · 0 评论 -
五、Java并发-共享模型之无锁
共享模型之无锁原创 2022-07-15 09:59:38 · 193 阅读 · 0 评论 -
多线程中的「lost wake up 问题」| 为什么wait()和notify()需要搭配synchonized关键字使用?
原文链接https//blog.csdn.net/m0_46672151/article/details/123180122。版权声明本文为CSDN博主「兴涛」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。读写屏障涉及到JVM和并发编程的知识,但是其概念又相差较多,容易混淆。2、Volatile通过读写屏障保证可见性和有序性。声明写屏障后,写屏障之前的代码都会同步到主存当中,Volatile的底层实现原理就是内存屏障。...转载 2022-07-22 16:00:00 · 253 阅读 · 0 评论 -
内存屏障中的读写屏障——并发问题
原文链接https//blog.csdn.net/m0_46672151/article/details/123180122。版权声明本文为CSDN博主「兴涛」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。读写屏障涉及到JVM和并发编程的知识,但是其概念又相差较多,容易混淆。2、Volatile通过读写屏障保证可见性和有序性。声明写屏障后,写屏障之前的代码都会同步到主存当中,Volatile的底层实现原理就是内存屏障。...转载 2022-07-22 15:08:35 · 1210 阅读 · 0 评论 -
JUC-并发包
三种集合:集合对比:工作步骤:初始化,使用 cas 来保证并发安全,懒惰初始化 table树化,当 table.length < 64 时,先尝试扩容,超过 64 时,并且 bin.length > 8 时,会将链表树化,树化过程会用 synchronized 锁住链表头说明:锁住某个槽位的对象头,是一种很好的细粒度的加锁方式,类似 MySQL 中的行锁put,如果该 bin 尚未创建,只需要使用 cas 创建 bin;如果已经有了,锁住链表头进行后续 put 操作,元素添加至 bin 的尾部get,无锁操原创 2022-07-21 11:31:25 · 189 阅读 · 0 评论 -
JUC-同步器
AQS:AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架,许多同步类实现都依赖于该同步器AQS 用状态属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁AQS 核心思想:如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置锁定状态请求的共享资源被占用,AQS 用 CLH 队列实现线程阻塞等待以及被唤醒时锁分配的机制,将暂时获取不到锁的线程加入到队列中CLH 是一种基于单向链表的高性能、公原创 2022-07-22 01:00:00 · 223 阅读 · 0 评论 -
JUC-线程池
线程池:一个容纳多个线程的容器,容器中的线程可以重复使用,省去了频繁创建和销毁线程对象的操作线程池作用:线程池的核心思想:线程复用,同一个线程可以被重复使用,来处理多个任务池化技术 (Pool) :一种编程技巧,核心思想是资源复用,在请求量大时能优化应用性能,降低系统频繁建连的资源开销有界队列和无界队列:有界队列:有固定大小的队列,比如设定了固定大小的 LinkedBlockingQueue,又或者大小为 0无界队列:没有设置固定大小的队列,这些队列可以直接入队,直到溢出(超过 Integer.MAX_VA原创 2022-07-21 11:29:05 · 372 阅读 · 0 评论 -
JUC-无锁
ThreadLocal类用来提供线程内部的局部变量,这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量,分配在堆内的TLAB中ThreadLocal实例通常来说都是类型的,属于一个线程的本地变量,用于关联线程和线程上下文。每个线程都会在ThreadLocal中保存一份该线程独有的数据,所以是线程安全的ThreadLocal作用线程并发应用在多线程并发的场景下传递数据原理同步机制采用以时间换空间以空间换时间。......原创 2022-07-21 11:27:30 · 221 阅读 · 0 评论 -
JUC-内存
该缓存行只被缓存在该CPU的缓存中,并且是被修改过的,与主存中的数据不一致(dirty),该缓存行中的内存需要在未来的某个时间点(其它CPU读取主存中相应数据之前)写回(writeback)主存。CPU处理器速度远远大于在主内存中的,为了解决速度差异,在它们之间架设了多级缓存,如L1、L2、L3级别的缓存,这些缓存离CPU越近就越快,将频繁操作的数据缓存到这里,加快访问速度。,线程对所有变量的操作都是先对变量进行拷贝,然后在工作内存中进行,不能直接操作主内存中的变量;...原创 2022-07-21 11:26:23 · 205 阅读 · 0 评论 -
JUC-同步
临界资源:一次仅允许一个进程使用的资源成为临界资源临界区:访问临界资源的代码块竞态条件:多个线程在临界区内执行,由于代码的执行序列不同而导致结果无法预测,称之为发生了竞态条件一个程序运行多个线程是没有问题,多个线程读共享资源也没有问题,在多个线程对共享资源读写操作时发生指令交错,就会出现问题为了避免临界区的竞态条件发生(解决线程安全问题):管程(monitor):由局部于自己的若干公共变量和所有访问这些公共变量的过程所组成的软件模块,保证同一时刻只有一个进程在管程内活动,即管程内定义的操作在同一时刻只被一个原创 2022-07-21 11:25:12 · 251 阅读 · 0 评论 -
JUC-进程和线程
进程:程序是静止的,进程实体的运行过程就是进程,是系统进行资源分配的基本单位进程的特征:并发性、异步性、动态性、独立性、结构性线程:线程是属于进程的,是一个基本的 CPU 执行单元,是程序执行流的最小单元。线程是进程中的一个实体,是系统独立调度的基本单位,线程本身不拥有系统资源,只拥有一点在运行中必不可少的资源,与同属一个进程的其他线程共享进程所拥有的全部资源关系:一个进程可以包含多个线程,这就是多线程,比如看视频是进程,图画、声音、广告等就是多个线程线程的作用:使多道程序更好的并发执行,提高资源利用率和系原创 2022-07-21 11:24:05 · 278 阅读 · 0 评论 -
Java并发面试题
多线程多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务。多线程编程中一般线程的个数都大于CPU核心的个数,而一个CPU核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU采取的策略是为每个线程分配时间片并轮转的形式。当一个线程的时间片用完的时候就会重新处于就绪状态让给其他线程使用,这个过程就属于一次上下文切换。概括来说就是任务从保存到再加载的过程就是一次上下文切换。上下文切换通常是计算密集型的。互斥条件AtomicLong。...转载 2022-07-16 11:10:40 · 271 阅读 · 0 评论 -
六、Java并发-共享模型之不可变与线程池
Java并发-共享模型之不可变与线程池原创 2022-07-15 10:04:18 · 175 阅读 · 0 评论