![](https://img-blog.csdnimg.cn/26e1f2fe6a99418d963306dbadcab02d.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程
文章平均质量分 88
那些年,为在阿里混下去学习的并发编程课程
Java学习者柯十一
博客主要记录平时学习的一些新技术和BUG以及算法研究,热衷分享喜欢原创~关注我会给你带来一些不一样的认知和成长。
展开
-
【并发编程学习篇】Future&CompletableFuture的使用与原理剖析
当需要批量提交异步任务的时候建议你使用CompletionServiceCompletionService将线程池Executor和阻塞队列BlockingQueue的功能融合在了一起,能够让批量异步任务的管理更简单。CompletionService能够让异步任务的执行结果「有序化」先执行完的先进入阻塞队列,利用这个特性,你可以轻松实现后续处理的有序性,避免无谓的等待,同时还可以快速实现诸如Forking Cluster这样的需求。线程池隔离。原创 2023-03-17 02:25:30 · 5704 阅读 · 2 评论 -
【并发编程学习篇】导致JVM内存泄露的ThreadLocal详解
ThreadLocal对于每一位Java读者而言我想可能都不陌生,因为面试基本都会被问到。ThreadLocal包含了四个方法:void set(Object value) 设置当前线程的线程局部变量的值。public Object get() 该方法返回当前线程所对应的线程局部变量。 public void remove() 将当前线程局部变量的值删除,其目的是为了减少内存使用,加快内存回收。 protected Object initialValue() 返回该线程局部变量的初始值,.原创 2021-07-23 15:25:47 · 10451 阅读 · 2 评论 -
【并发编程学习篇】深入理解CyclicBarrier
字面意思回环栅栏(循环屏障),通过它可以实现让一组线程等待至某个状态(屏障点)之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。和CountDownLatch很像,CountDownLatch在操作时,只能使用一次,也就是state变为0之后,就无法继续玩了。CyclicBarrier是可以复用的,他的计数器可以归位,然后再处理。而且可以在计数过程中出现问题后,重置当前CyclicBarrier,再次重新操作!原创 2023-02-28 16:43:40 · 21797 阅读 · 0 评论 -
【并发编程学习篇】深入理解CountDownLatch
CountDownLatch(闭锁)是一个同步协助类,允许一个或多个线程等待,直到其他线程完成操作集。CountDownLatch使用给定的计数值(count)初始化。await方法会阻塞直到当前的计数值被countDown方法的调用达到0,count为0之后所有等待的线程都会被释放,并且随后对await方法的调用都会立即返回。这是一个一次性现象 —— count不会被重置。如果你需要一个重置count的版本,那么请考虑使用CyclicBarrier。原创 2023-02-27 14:22:40 · 22375 阅读 · 0 评论 -
【并发编程学习篇】深入理解Semaphore
Semaphore,俗称信号量,它是操作系统中PV操作的原语在java的实现,它也是基于AbstractQueuedSynchronizer实现的。Semaphore的功能非常强大,大小为1的信号量就类似于互斥锁,通过同时只能有一个线程获取信号量实现。大小为n(n>0)的信号量可以实现限流的功能,它可以实现只能有n个线程同时获取信号量。原创 2023-02-27 13:53:57 · 22152 阅读 · 0 评论 -
【并发编程学习篇】ReentrantReadWriteLock详解
现实中有这样一种场景对共享资源有读和写的操作,且写操作没有读操作那么频繁(读多写少)在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源(读读可以并发)但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写操作了(读写,写读,写写互斥)在读多于写的情况下,读写锁能够提供比排它锁更好的并发性和吞吐量。原创 2022-11-23 17:13:55 · 28169 阅读 · 0 评论 -
【并发编程学习篇】ReentrantLock设计思想剖析
ReentrantLock是一种基于AQS框架的应用实现,是JDK中的一种线程并发访问的同步手段,它的功能类似于synchronized是一种互斥锁,可以保证线程安全。可中断可以设置超时时间可以设置为公平锁支持多个条件变量与 synchronized 一样,都支持可重入。原创 2023-02-24 17:32:47 · 15823 阅读 · 0 评论 -
【并发编程学习篇】synchronized的原理
Synchronized 是由 JVM 实现的一种实现互斥同步的一种方式,如果你查看被 Synchronized 修饰过的程序块编译后的字节码,会发现,被 Synchronized 修饰过的程序块,在编译前后被编译器生成了 monitorenter 和 monitorexit 两个字节码指令。synchronized会根据线程竞争的情况,先去尝试在不加重量级锁的情况下去保证线程的安全性,所以引入了偏向锁和轻量级锁的机制。如果更新成功,则表示成功获取锁,否则直接开始执行锁膨胀(这里轻量级锁没有自旋的操作)原创 2023-02-22 17:26:20 · 16076 阅读 · 0 评论 -
【并发编程学习篇】阻塞队列的使用与原理分析
Queue接口//添加一个元素,添加成功返回true, 如果队列满了,就会抛出异常 boolean add(E e);//添加一个元素,添加成功返回true, 如果队列满了,返回false boolean offer(E e);//返回并删除队首元素,队列为空则抛出异常 E remove();//返回并删除队首元素,队列为空则返回null E poll();//返回队首元素,但不移除,队列为空则抛出异常 E element();//获取队首元素,但不移除,队列为空则返回null E peek()原创 2022-11-24 11:14:36 · 28077 阅读 · 0 评论 -
【并发编程学习篇】多线程并行的场景的可见性的问题分析
一个缓存行默认是64byte,缓存的数据比这个大的话就会升级为总线锁了,总线锁是锁定CPU的总线,从而导致同一时刻只能有一个线程与内存通信,这就避免了多线程并发造成的可见性问题,这会导致锁定期间,其他处理器也不能操作其他内存地址的数据,CPU的执行效率大幅度下降,相当于单核执行。缓存行的共享状态的时候,如果处理器对共享变量执行写操作的时候会对其所在缓存行加锁(同一个处理器的其他线程无法操作这个缓存行),同时会发一个总线写的信号,然后其他也拥有这个缓存行数据的处理器通过 总线窥探机制。原创 2023-02-13 10:43:41 · 27244 阅读 · 0 评论 -
【并发编程学习篇】并发线程池底层原理详解与源码分析
/ 线程池的核心线程数如何设置 // 任务可以分为两种:CPU密集,IO密集。executor . execute(任务);executor . submit(有返回结果的任务);原创 2023-02-24 00:49:34 · 15417 阅读 · 0 评论 -
【并发编程学习篇】深入理解Java线程
Java线程的生命周期**Java 语言中线程共有六种状态,分别是:**1. NEW(初始化状态)2. RUNNABLE(可运行状态+运行状态)3. BLOCKED(阻塞状态)4. WAITING(无时限等待)5. TIMED_WAITING(有时限等待)6. TERMINATED(终止状态)原创 2023-02-21 23:51:26 · 23846 阅读 · 0 评论 -
这些年,为保住阿里饭碗学习的并发编程
数据库的事务:ACIDA:原子性-事务是一个最小的执行的单位,一次事务的多次操作要么都成功,要么都失败。i++;操作是原子性?肯定不是:i++操作一共有三个指令getfield:从主内存拉取数据到CPU寄存器iadd:在寄存器内部对数据进行+1putfield:将CPU寄存器中的结果甩到主内存中如何保证i++是原子性的。锁:synchronized,lock,Atomic(CAS)使用lock锁也会有类似的概念,也就是在操作i++的三个指令前,先基于AQS成功修改state后才可以操作使用synchroni原创 2023-02-24 09:51:33 · 11552 阅读 · 0 评论