![](https://img-blog.csdnimg.cn/9c3668e336ae493e9de619366d8d5f30.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程
文章平均质量分 74
书中自有颜如玉,书中自有黄金屋.
double_lifly
这个作者很懒,什么都没留下…
展开
-
如何理解ThreadLocal
也就是说,调用ThreadLocal的set()方法存储的本地变量在具体线程的内存空间中,而ThreadLocal类支提供了set()和get()方法来存储和读取本地变量的值,当调用ThreadLocal类的set()方法时,把要存储的值存储在调用线程的threadLocals变量中,当调用ThreadLocal类的get()方法时,从当前线程的threadLocals变量中获取保存的值。保存数据时传递的key为当前ThreadLocal的this对象,而传递的value为调用set()方法传递的值。原创 2023-04-22 21:35:10 · 465 阅读 · 0 评论 -
如何理解线程池
当调用Executors.newSingleThreadExecutor方法创建线程池时,表示创建只有一个工作线程的线程池,即线程池中只有一个线程执行任务,能够保证提交到线程池中的所有任务按照先进先出的顺序,或者按照某个优先级的顺序来执行。如果在向线程池提交新任务时,线程池中无空闲线程,则新创建线程来执行任务。在调用shutdownNow()方法关闭线程时,线程池不能接受新提交的任务,也不能继续处理阻塞队列中的任务,同时,还会中断正在执行的线程,使得正在执行的任务被中断,线程池立即关闭并抛出异常。原创 2023-04-19 22:55:50 · 368 阅读 · 0 评论 -
如何理解CAS
ABA问题简单来说就是一个变量的初始值为A,被修改为B,然后再次被修改为A了。在使用CAS算法进行检测时,无法检测出A的值是否经历过被修改为B,又再次被修改为A的过程。原创 2023-04-08 15:09:53 · 772 阅读 · 0 评论 -
如何理解Lock
JDK层面提供了Lock锁都是通过Java提供的接口来手动解锁和释放锁的,所以在某种程度上,JDK中提供的Lock锁也叫显示锁、JDK提供的显示锁位于java.util.concurrent.locks包下,Lock接口的源码如下:lock()方法:阻塞模式抢占锁的方法。如果当前前程抢占锁成功,则继续向下执行程序的业务逻辑,否则,当前线程会阻塞。直到其他抢占到锁的线程释放锁后再继续抢占锁。lockInterruptibly()方法:可中断模式抢占锁的方法,当前线程在调用lockInterruptibl原创 2023-04-05 21:21:46 · 319 阅读 · 0 评论 -
如何理解AQS
这里需要结合acquireQueued()方法理解,当线程被唤醒后,会进入acquireQueued()方法中的if(p==head && tryAcquier(arg))逻辑判断,当条件成立是,被唤醒的线程会将自己所在的节点设置为head,表示已经获取到资源,此时,acquire()方法也执行完毕了。如果CAS操作设置成,则唤醒队列中的后继结点。在同步队列中,如果当前线程获取资源失败,就会通过addWaiter()方法将当前线程放入队列的尾部,并且保持自旋的状态,不判断自己所在的节点是否是队列的头结点。原创 2023-03-24 21:30:06 · 756 阅读 · 0 评论 -
如何理解Synchronized
synchronized是基于JVM中的monitor锁实现的,jdk1.5版本之前的synchronized锁性能较低,但是从jdk1.6版本开始,对synchronized锁进行了大量的优化,引入了锁粗化,锁消除,偏向锁,轻量级锁,适应性自旋等技术来提升synchronized锁的性能。无论synchronized修饰方法,还是修饰代码块,底层都是通过JVM调用操作系统的Mutex锁实现的,当线程被阻塞时会被挂起,等待CPU重新调度,这会导致线程在操作系统的用户态和内核态之间切换,影响程序的执行性能。原创 2023-03-22 18:14:50 · 290 阅读 · 0 评论 -
并发编程的三大核心问题(三)
类比现实案例并发编程中的分工同步问题类比现实案例并发编程中的同步互斥问题类比现实案例并发编程中的互斥原创 2022-07-07 22:43:44 · 124 阅读 · 0 评论 -
并发编程常见的锁介绍(二)
悲观锁和乐观锁公平锁与非公平锁独占锁和共享锁可中断锁与不可中断锁可重入锁与不可重入锁读/写锁自旋锁死锁/饥饿与活锁原创 2022-07-06 22:18:36 · 2622 阅读 · 0 评论 -
并发编程的一些概念(一)
主要介绍一些并发编程的一些基本概念,比如进程与线程,线程的一些基本概念,同步与异步,阻塞与非阻塞等原创 2022-07-05 22:16:30 · 101 阅读 · 0 评论