
并发编程
文章平均质量分 90
这里收集java并发编程的内容
L提笔画长安
图难于其易,为大于其细
展开
-
并发编程——8.阶段小结
后面,我们重点的讲解了并发编程中的锁,用锁来保证线程安全,我们讲了乐观锁与悲观锁,在乐观锁中我们讲了CAS算法、ABA问题,然后我们讲了自旋锁与互斥锁,讲了消费者与生产者模式(这部分内容属于拓宽的),然后中的讲了 synchronized锁升级机制,讲了可重入锁,讲了ReentrantLock同步互斥锁,讲了公平锁和非公平锁,讲了共享锁和排他锁,讲了synchronized与Lock的区别。然后,我们简单的讲了一下线程的底层原理(源码层级的),画了一张图,这部分内容最后是掌握一下,面试时说出来很装逼的。原创 2024-04-11 17:01:26 · 482 阅读 · 0 评论 -
并发编程——7.Java的“锁”事
前面,我们介绍了一些保证线程安全的手段,比如将共享资源设置为只读,比如将共享变量变为局部变量的数据,比如用ThreadLocal线程变量,比如用volatile来解决可见性和有序性的问题,再比如我们使用原子类来解决数值的一些问题,再比如使用synchronized关键字,但是synchronized会将并行改为串行,吞吐量大的时候不适合使用,之前我们可以用上面的这些手段。原创 2024-04-11 11:59:30 · 808 阅读 · 0 评论 -
并发编程——6.线程的安全
要想知道什么是线程安全,就要知道什么是线程不安全多线程下并发同时对共享数据进行读写,造成数据混乱的情况有一份商品,数量为10个,现在有并发的五个线程进行购买操作,首先每个线程读取商品数量即10,然后每个线程执行购买操作即商品数量减一,然后五个线程将操作完成的数据写进数据库即商品数量变为9,这明显是错误的,这就是线程不安全的情况。线程安全就是为了避免线程不安全的情况出现。当多线程并发访问临界资源时,如果破坏其原子性、可见性、有序性,可能会造成数据不一致。原创 2024-04-09 23:28:12 · 1068 阅读 · 0 评论 -
并发编程——5.JMM、可见性和有序性及volatile的底层实现原理
首先,我们来看一下JMM模型。这是一张多核CPU的并发缓存架构图。我们的数据存在主内存RAM中,由于CPU的运算速度非常快,而CPU从主内存中读取数据的速度比较慢(与前者的速度是差几个量级的),所以为了适配这二者的速度差异,我们在CPU中开辟了一块缓存区,空间不大,里面放的是CPU中使用频率较高的数据,CPU从缓存区中读取数据的速度就比从主内存中读取数据的速度要快的多,这样就便于我们CPU的运行。我们的JMM模型就与上面的多核CPU并发缓存架构类似。Java多线程内存模型(简称JMM)跟cpu缓存模型。原创 2024-04-09 00:41:34 · 749 阅读 · 0 评论 -
并发编程——4.线程池
首先,我们要清楚这样的一个问题,我们为什么要用线程池?某线上商城做秒杀活动,1秒内有10万个请求打来,我们的服务器能在1秒内创建10万个线程吗?显然是不合理的。其次,我们使用线程时会伴随着线程的创建和消耗,当线程数量很多时,这会占用机器的资源,所以这也不合理。为了解决上面提到的问题,所以我们使用了线程池。如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。原创 2024-03-31 00:21:14 · 858 阅读 · 0 评论 -
并发编程——3.细说线程
这篇文章我们来详细的说一下并发编程中的线程及其相关的内容。原创 2023-12-25 23:55:01 · 926 阅读 · 0 评论 -
并发编程——2.基础概念及其它相关的概述
这篇文章我们讲了线程,进程,协程,也讲了并发,并行,串行。介绍了JUC,上下文切换,时间片等相关概念,都是很基础很简单的内容,这是后面学习并发编程的基础,要熟练。原创 2023-10-19 22:49:39 · 407 阅读 · 0 评论 -
并发编程——1.java内存图及相关内容
然后main方法调用m1方法,m1方法入栈,m1方法调用m2方法,m2方法入栈,m2方法调用m3方法,m3方法入栈,m3方法中创建person类的实例x1,所以java在堆内存中创建出实例对象,然后m3方法执行实例x1的m2方法,所以m3方法中的实例x1的m2方法入栈,而该实例的m2方法又调用该类的m1方法,所以该实例的m1方法入栈,等m1执行结束后,x1的m1方法出栈,然后x1的m2出栈,然后Test1的m3出栈,然后Test1的m2出栈,然后Test1的m1出栈,然后回到main方法中再依次往下执行。原创 2023-10-13 22:54:51 · 895 阅读 · 0 评论