![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA多线程夯实基础
文章平均质量分 81
摸鱼兄
这个作者很懒,什么都没留下…
展开
-
六、JAVA多线程夯实基础--Java内存模型(Java Memory Model)简称J M M和深入解析volatile关键字
程序是指令与数据的集合,计算机执行程序时,是C P U在执行每条指令,因为C P U要从内存读指令,又要根据指令指示去内存读写数据做运算,所以执行指令就免不了与内存打交道,早期内存读写速度与C P U处理速度差距不大,倒没什么问题。随着C P U技术快速发展,C P U的速度越来越快,,导致内存的读写(IO)速度与C P U的处理速度差距越来越大,为了解决这个问题,引入了缓存(Cache)的设计,在C P U与内存之间加上,这里的缓存层就是指C P U内的L1,L2,L3图中可以看出离C P U。原创 2023-09-02 21:02:14 · 62 阅读 · 0 评论 -
五、JAVA多线程夯实基础--C A S(Compare and swap)
C A S(Compare and swap)或者C A S(Compare and set或者比较交换,映射到操作系统就是一条cmpxchg硬件汇编指令(),其作用是让C P U将内存值更新为新值,但是有个条件,内存值必须与期望值相同,并且C A S操作一次C A S的操作:包含3个参数V表示待更新的内存值,E表示预期值,N表示新值,当V值等于E值时,才会将V值更新成N值,如果V值和E值不等,不做更新。结合 CAS 和 volatile 可以实现无锁并发,适用于线程数少、多核 CPU 的场景下。原创 2023-09-02 11:30:34 · 58 阅读 · 0 评论 -
四、JAVA多线程夯实基础--LockSupport park unpark 使用和原理
是线程工具类,主要作用是阻塞和唤醒线程,底层实现依赖Unsafe,同时它还是锁和其他同步类实现的基础,提供两类分别是park和unpark,即阻塞与唤醒线程。原创 2023-09-02 11:13:41 · 222 阅读 · 0 评论 -
三、JAVA多线程夯实基础--synchronized
synchronized 锁对象的时候有个计数器,他会记录下线程获取锁的次数,在执行完对应的代码块之后,计数器就会-1,直到计数器清零,就释放锁了。当前线程持有的锁是偏向锁的时候,被另外的线程所访问,偏向锁就会升级为轻量级锁,其他线程会通过自旋的形式尝试获取锁,不会阻塞,从而提高性能。因此在有竞争的情况下, 轻量级锁反而会比传统的重量级锁更慢。如果在尝试加轻量级锁的过程中,CAS 操作无法成功,这时一种情况就是有其它线程为此对象加上了轻量级锁(有 竞争),这时需要进行锁膨胀,将轻量级锁变为重量级锁。原创 2023-09-02 10:56:06 · 66 阅读 · 0 评论 -
二、JAVA多线程夯实基础--创建线程的方式和线程状态转换
代码展示。原创 2023-09-02 09:29:59 · 36 阅读 · 0 评论 -
一、JAVA多线程夯实基础-进程和线程区别
进程:进程是系统进行资源分配和调度的独立单位,每一个进程都有它自己的内存空间和系统资源。进程实现多处理机环境下的进程调度,分派,切换时,都需要花费较大的时间和空间开销。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器 等),也有的程序只能启动一个实例进程(例如网易云音乐、360 安全卫士等)。线程:线程作为资源调度的基本单位。一个进程之内可以分为一到多个线程。原创 2023-09-02 09:11:28 · 37 阅读 · 0 评论