JUC并发编程学习笔记
文章平均质量分 93
程哥哥吖
路虽远,行则将至;事虽难,做则必成。
展开
-
JUC并发编程学习笔记——知识补充(Threadlocal和引用类型)
ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。因为每个 Thread 内有自己的实例副本,且该副本只能由当前 Thread 使用。原创 2023-02-12 08:19:20 · 559 阅读 · 0 评论 -
JUC并发编程学习笔记——CAS个人理解
即compare and swap(比较与交换),是一种有名的无锁算法。无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization)。原创 2023-01-13 22:15:00 · 247 阅读 · 0 评论 -
JUC并发编程学习笔记——AQS个人理解
AQS是AbstractQueuedSynchronizer的简称,是构建锁和同步器的框架,是并发容器JUC(java.util.concurrent)下locks包内的一个类,AQS提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架;底层实现的数据结构是一个双向链表。原创 2023-01-12 11:42:06 · 404 阅读 · 0 评论 -
JUC并发编程学习笔记(六)线程池及分支合并框架
线程池(英语:thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。原创 2023-01-07 23:34:01 · 365 阅读 · 0 评论 -
JUC并发编程学习笔记(五)读写锁和阻塞队列
**回顾悲观锁和乐观锁的概念****悲观锁**:单独每个人完成事情的时候,执行上锁解锁。解决并发中的问题,不支持并发操作,只能一个一个操作,效率低顾名思义,就是比较悲观的锁,总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(**共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程**)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中`sy原创 2023-01-05 16:48:16 · 329 阅读 · 0 评论 -
JUC并发编程学习笔记(四)callable接口与辅助类
目前我们学习了有两种创建线程的方法一种是通过创建 Thread 类,另一种是通过使用 Runnable 创建线程。但是,Runnable 缺少的一项功能是,当线程终止时(即 run()完成时),我们无法使线程返回结果。为了支持此功能,Java 中提供了 Callable 接口。原创 2023-01-02 23:17:16 · 453 阅读 · 0 评论 -
JUC并发编程学习笔记(三)集合线程安全及多线程锁
一个对象里面如果有多个 synchronized 方法,某一个时刻内,只要一个线程去调用其中的一个 synchronized 方法了,其它的线程都只能等待,换句话说,某一个时刻内,只能有唯一一个线程去访问这些synchronized 方法。锁的是当前对象 this,被锁定后,其它的线程都不能进入到当前对象的其它的synchronized 方法加个普通方法后发现和同步锁无关换成两个对象后,不是同一把锁了,情况立刻变化。synchronized实现同步的基础:Java中的每一个对象都可以作为锁。原创 2023-01-01 22:56:31 · 328 阅读 · 0 评论 -
JUC并发编程学习笔记(二)Lock接口及线程间通信
Lock 锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作。它们允许更灵活的结构,可能具有非常不同的属性,并且可能支持多个关联的条件对象。Lock 提供了比 synchronized 更多的功能。原创 2022-12-30 21:29:50 · 185 阅读 · 0 评论 -
JUC并发编程学习笔记(一)基本概念篇
协程,英文Coroutines,是一种比线程更加轻量级的存在。协程不是进程,也不是线程,它就是一个可以在某个地方挂起的特殊函数,并且可以重新在挂起处继续运行。所以说,协程与进程、线程相比,不是一个维度的概念。一个进程可以包含多个线程,一个线程也可以包含多个协程,也就是说,一个线程内可以有多个那样的特殊函数在运行。但是有一点,必须明确,一个线程内的多个协程的运行是串行的。如果有多核CPU的话,多个进程或一个进程内的多个线程是可以并行运行的,但是一个线程内的多个协程却绝对串行的,无论有多少个CPU(核)。原创 2022-12-29 18:37:03 · 525 阅读 · 0 评论