![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java多线程(并发)
文章平均质量分 86
200
最大的敌人是自己
展开
-
java多线程(并发)夯实之路-CAS原理与应用深入浅出
CompareAndSet,简称CAS(也有Compare And Swap的说法),它是原子的.它会将pre即之前的值和最新值进行比较,如果相同,修改为next,不同则修改失败原创 2024-01-11 18:54:57 · 802 阅读 · 1 评论 -
java多线程(并发)夯实之路-synchronized锁升级深入浅出
线程为对象加上轻量级锁后,有竞争,这时会进行锁膨胀,轻量级锁变为重量级锁。竞争重量级锁时,可以用自旋来优化,线程自旋过程中如果持锁线程退出同步块,释放了锁,线程就自旋成功,线程就避免了阻塞。偏向锁有其他线程访问会变为轻量级锁,有竞争(多线程同时访问)会锁膨胀变为重量级锁可以加。原创 2024-01-11 18:42:23 · 917 阅读 · 1 评论 -
java多线程(并发)夯实之路-volatile深入浅出
volatile(易变关键字)可以用来修饰成员变量和静态成员变量,线程只能从主存中获取它的值,线程操作volatile变量都是直接操作主存。与synchronzied区别:synchronzied需要创建Monitor,属于重量级的操作,volatile更轻量(推荐)原创 2024-01-11 17:01:48 · 1064 阅读 · 1 评论 -
java多线程(并发)夯实之路- ReentrantLock深入浅出(解决哲学家问题)
但是顺序加锁容易导致饥饿问题,如哲学家就餐问题会有死锁产生,用顺序加锁解决死锁问题后,会出现饥饿问题(一些哲学家总是优先抢到锁,一直进餐,导致其他哲学家一直不能进餐)如果一个线程需要同时获得多把锁,就容易发生死锁 t1线程获得了A对象的锁,接下来想获得B对象的锁 t2线程获得了B对象的锁,接下来想获得A对象的锁。方法前需要先获得锁,方法执行之后会释放锁,进入condtionObject等待,被唤醒(打断,超时)重新竞争锁,成功获得锁后继续执行。()方法尝试获取锁,获取到了返回真,否则返回假(不会等待)。原创 2024-01-11 15:47:13 · 866 阅读 · 1 评论 -
java多线程(并发)夯实之路-线程安全分析深入浅出
多个线程对共享资源进行写操作时,会发生上下文切换,造成线程安全问题一段代码块中如果存在对共享资源的多线程读写操作,则称这段代码区为临界区多个线程在临界区内执行,代码执行序列不同导致结果无法预测,称为发生了竞态条件原创 2024-01-11 13:42:24 · 388 阅读 · 1 评论 -
java多线程(并发)夯实之路-synchronized深入浅出
synchronized:俗称对象锁,它采用互斥的方式,使得同一时刻最多只能有一个线程持有对象锁,其他对象想要获取对象锁就只能进入阻塞状态(注意必须使用相同的锁)。在加了锁的线程中,只有获取了锁的线程能够运行原创 2024-01-10 22:32:44 · 478 阅读 · 1 评论 -
java多线程(并发)夯实之路-线程的状态深入浅出
初始状态:仅在语言层面创建了线程对象,还没有与操作系统相关联(new出来Thread对象,但没调用它的start方法)可运行状态(就绪状态):线程被创建(与操作系统相关联),可以由CPU调度执行运行状态:获取了CPU时间片,正在运行的状态原创 2024-01-10 21:51:56 · 383 阅读 · 1 评论 -
java多线程(并发)夯实之路-进程与线程深入浅出
进程:程序由指令和数据组成,程序工作时,就会将指令加载至CPU,数据加载至内存,进程就是用来加载指令,管理内存,管理IO的。当程序运行,磁盘加载这个程序的代码至内存,这时就开启了一个进程。进程可以视为程序的一个实例,大部分程序能同时运行多个实例进程(记事本,浏览器),也有程序只能启动一个实例进程(网易云音乐)。原创 2024-01-10 20:38:36 · 918 阅读 · 1 评论