
多线程
闫二白
单身汪一枚
展开
-
死磕Java多线程(三)--- Java线程的内存模型
。。。。。。原创 2019-08-10 17:21:53 · 210 阅读 · 0 评论 -
死磕Java多线程(二)--- 多线程必须了解的三大特性
引言:我们都知道并发程序正确地执行,必须要保证原子性、可见性以及有序性。只要有一个没有被保证,就有可能会导致程序运行不正确。下面让我们来看看原子性、可见性以及有序性到底是什么?可见性可见性指的是一个线程对变量的写操作对其他线程后续的读操作可见。由于现代CPU都有多级缓存,CPU的操作都是基于高速缓存的,而线程通信是基于内存的,这中间有一个Gap, 可见性的关键还是在对变量的写操作之后能够在...原创 2019-08-10 17:37:49 · 209 阅读 · 0 评论 -
死磕Java多线程(四)--- 指令重排、内存屏障、Happens-before
5.指令重排:执行代码时jvm会进行指令重排序,处理器为了提高效率,可以对输入代码进行优化,它不保证程序中各个语句的执行先后顺序同代码中的顺序一致,根据处理器特性(CPU多级缓存系统、多核处理器等)适当的对机器指令进行重排序,使机器指令能更符合CPU的执行特性,最大限度的发挥机器性能。...原创 2019-08-10 18:15:04 · 796 阅读 · 1 评论 -
死磕Java多线程(一)---线程的简单介绍
引言以前对多线程的认识就只有new Thread 或 实现一个runnable接口,简单用用互斥锁(synchronized),线程间的通信(wait/notify)就没了,最近在复习多线程,就去网上看看大佬们的博客,才发现自己真的是井底之蛙,多线程都没入门,所以最近在拼命学习多线程,顺便总结一下,方便以后复习。。。。1. 线程的实现2.线程的六种状态3.多线程的优点更好的资源利...原创 2019-08-10 19:03:26 · 267 阅读 · 1 评论 -
死磕Java多线程(五)---理解CPU高速缓存的工作原理
我们说了Java内存模型是一个语言级别的内存模型抽象,它屏蔽了底层硬件实现内存一致性需求的差异,提供了对上层的统一的接口来提供保证内存一致性的编程能力。在一致性这个问题域中,各个层面扮演的角色大致如下:一致性模型,定义了各种一致性模型的理论基础硬件层,提供了实现某些一致性模型的硬件能力。硬件在默认情况下按照最基本的方式运行,比如对同一个线程没有数据依赖的指令可以重排序优化执行,有数据依赖...转载 2019-08-10 19:30:09 · 3751 阅读 · 0 评论 -
死磕Java多线程(六)---Volatile原理
引言:上节说到计算机的硬件组成可以抽象为由总线、IO设备、主存、处理器(CPU)等组成。其中数据存放在主存中,CPU负责指令的执行,CPU的指令执行非常快,大部分简单指令的执行只需要一个时钟周期,而一次主内存数据的读取则需要几十到几百个时钟周期,那么CPU从主存中读写数据就会有很大的延迟。这个时候就产生了高速缓存的概念。也就是说,当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高...原创 2019-08-12 00:34:26 · 268 阅读 · 0 评论 -
死磕Java多线程 ---- 线程死锁
1. 什么是死锁?死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成互相等待的现象,在无外力作用的情况下,这些线程会相互等待而无法继续运行下去。线程T1已经持有了资源R1,他同时还想申请资源R2,与此同时,线程T2已经持有了资源R2,同时还想申请资源R1,所以线程T1和T2就因为相互等待对方已经持有的资源,而进入了死锁状态。2. 死锁产生的必要条件产生死锁必须同时满足以下四个条件...原创 2019-08-31 09:11:26 · 246 阅读 · 0 评论 -
死磕Java多线程(十)------JUC中相关原子操作类的简单使用
1. 常用的JUC下的原子操作类更新基本类型类:AtomicBoolean,AtomicInteger,AtomicLong更新数组类:AtomicIntegerArray,AtomicLongArray,AtomicReferenceArray更新引用类型:AtomicReference,AtomicMarkableReference,AtomicStampedReference更新字段...原创 2019-08-31 10:09:53 · 187 阅读 · 0 评论 -
死磕Java多线程(十一)JUC常用工具类的简单介绍和使用
1. CountDownLatch在日常开发中经常会遇到需要在主线程中开启多个线程去并行执行任务,并且主线程需要等待所有子线程执行完毕后再进行汇总的场景。在CountDownLatch出现之前一般都使用线程的join()方法来实现这一点,但是join方法不够灵活,不能够满足不同场景的需要,所以JDK开发组提供了CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。例...原创 2019-08-31 11:36:00 · 534 阅读 · 0 评论