![](https://img-blog.csdnimg.cn/0d5eae6ff5344724a86cc6494f34e345.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
🐈并发编程
文章平均质量分 86
并发编程理论与实战
共饮一杯无
CSDN内容合伙人,杭州开发者社区主理人,Java领域优质创作者,2022年度博客之星TOP15,CSDN博客专家,51CTO 专家博主,华为云享专家,阿里云专家博主,InfoQ专家博主,持续输出干货,欢迎关注。
鲜衣怒马意气风发,愿你归来仍是少年。
展开
-
多线程基本概念(并发与并行、线程与进程)和入门案例
同理,线程也是一样的,从宏观角度上理解线程是并行运行的,但是从微观角度上分析却是串行运行的,即一个线程一个线程的去运行,当系统只有一个CPU时,线程会以某种顺序执行多个线程,我们把这种情况称之为线程调度。对于CPU的一个核而言,某个时刻,只能执行一个线程,而 CPU的在多个线程间切换速度相对我们的感觉要快,看上去就是在同一时刻运行。,所有的线程对象都必须是Thread类或其子类的实例。优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。原创 2022-10-10 10:49:00 · 492 阅读 · 0 评论 -
面试官:可以谈谈乐观锁和悲观锁吗
乐观锁和悲观锁是两种思想,用于解决并发场景下的数据竞争问题。**它们的使用是非常广泛的,不局限于某种编程语言或数据库。**乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。原创 2022-05-06 06:30:00 · 17142 阅读 · 1 评论 -
Java线程池详解
文章目录线程池思想概述线程池概念线程池的使用线程池思想概述我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲解一下Java的线程池。线程池概念线程池:其实就是一个原创 2022-04-26 15:51:31 · 15838 阅读 · 0 评论 -
Java线程中的wait、notify和notifyAll解析
顾客去包子铺买包子,告知老板自身需求后,进入等待(调用wait()方法)老板处理的过程,此时顾客的状态为WAITING,老板做好包子后,告知(调用notify()方法)顾客包子做好了。💡线程间的通信的主要思想是生产者消费者机制。原创 2022-04-25 14:50:36 · 17625 阅读 · 0 评论 -
Java中线程的6种状态详解(NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED)
文章目录新建状态(NEW)运行状态(RUNNABLE)就绪状态(READY)运行状态(RUNNING)阻塞状态(BLOCKED)等待状态(WAITING)超时等待状态(TIMED_WAITING)消亡状态java.lang.Thread.State枚举类中定义了六种线程的状态,可以调用线程Thread中的getState()方法获取当前线程的状态。public enum State { NEW, RUNNABLE, BLOCKED, WAI原创 2022-04-26 05:30:00 · 16230 阅读 · 1 评论 -
多线程安全问题原理和解决办法,Synchronized和ReentrantLock使用与区别
线程安全问题概述卖票问题分析线程安全问题代码实现线程安全问题原理分析解决线程安全问题办法1-synchronized同步代码块同步技术原理分析解决线程安全问题办法2-synchronized普通同步方法解决线程安全问题办法3-synchronized静态同步方法解决线程安全问题办法4-Lock锁ReentrantLock和Synchronized的区别原创 2022-04-24 06:30:00 · 17726 阅读 · 0 评论 -
面试官:使用无界队列的线程池会导致内存飙升吗?
Executors创建线程池方式有如下几种:Executors.newFixedThreadPool(10);//LinkedBlockingQueue 无限加入队列Executors.newScheduledThreadPool(10);//DelayedWorkQueue 队列如果满了,阻塞Executors.newSingleThreadScheduledExecutor();//DelayedWorkQueue 队列如果满了,阻塞Executors.newCachedThreadPool()原创 2022-03-07 11:59:45 · 13348 阅读 · 0 评论 -
Java线程池Executor详解
线程池类图我们最常使用的Executors实现创建线程池使用线程主要是用上述类图中提供的类。在上边的类图中,包含了一个Executor框架,它是一个根据一组执行策略的调用调度执行和控制异步任务的框架,目的是提供一种将任务提交与任务如何运行分离开的机制。它包含了三个executor接口:Executor:运行新任务的简单接口ExecutorService:扩展了Executor,添加了用来管理执行器生命周期和任务生命周期的方法ScheduleExcutorService:扩展了ExecutorSer原创 2021-12-12 22:14:23 · 25141 阅读 · 1 评论 -
自定义过滤器和拦截器实现ThreadLocal线程封闭
线程封闭线程封闭一般通过以下三个方法:Ad-hoc线程封闭:程序控制实现,最糟糕,忽略堆栈封闭:局部变量,无并发问题ThreadLocal线程封闭:特别好的封闭方法方法2是最常用的,变量定义在接口内,本文主要讲解方法三,SpringBoot项目通过自定义过滤器和拦截器实现ThreadLocal线程封闭。实现Filter接口自定义过滤器和继承HandlerInterceptorAdapter自定义拦截器。ThreadLocal线程封闭实现步骤封装ThredLocal的方法/** * &l原创 2021-12-07 13:23:30 · 17582 阅读 · 0 评论 -
AQS同步组件-FutureTask、ForkJoin解析和用例
FutureTask原理FutureTask间接实现了runnable接口和future接口,说明了futureTask是runnable与callnable的集合体,即是有返回值的runnable方法。因此,FutureTask可以交给Executor执行,也可以由调用线程直接执行(FutureTask.run())。源码分析构造函数 public FutureTask(Callable<V> callable) { if (callable == null)原创 2021-12-12 13:47:40 · 16825 阅读 · 0 评论 -
AQS同步组件-ReentrantLock、ReentrantReadWriteLock解析和用例
ReentrantLock原理重入锁ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁,而不会造成自己阻塞自己。重进入是指任意线程在获取到锁之后能够再次获取该锁而不会被锁所阻塞。ReentrantLock虽然没能像synchronized关键字一样支持隐式的重进入,但是在调用lock()方法时,已经获取到锁的线程,能够再次调用lock()方法获取锁而不被阻塞。除此之外,该锁的还支持获取锁时的公平和非公平性选择。实际上,公平的锁机制往往没有非公平的效率高原创 2021-12-11 23:01:03 · 16610 阅读 · 0 评论 -
AQS同步组件-CyclicBarrier(循环屏障)解析和用例
CyclicBarrier原理CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。当某个线程调用了await方法之后,就会进入等待状态,并将计数器+1,直到所有线程调用await方法使计数器为CyclicBarrier设置的值,才可以继续执行,由于计数器可以重复使用,所以我们又叫它循环屏障。CyclicBarrier默认.原创 2021-12-11 17:18:57 · 13829 阅读 · 0 评论 -
AQS同步组件-CountDownLatch解析和案例
CountDownLatch原理CountDownLatch是通过一个计数器来实现的,计数器的初始化值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就相应得减1。当计数器到达0时,表示所有的线程都已完成任务,然后在闭锁上等待的线程就可以恢复执行任务。CountDownLatch可以起到阻塞线程,并保证线程在满足某种特定的情况后继续执行。![image.png](https://img-blog.csdnimg.cn/img_convert/da3b3319657cb72af38b50bc6cb原创 2021-12-10 22:10:42 · 17484 阅读 · 0 评论 -
AQS同步组件-Semaphore(信号量)解析和案例
基本概念Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制并发访问资源的线程个数。例如排队买票的情况,如果只有三个窗口,那么同一时间最多也只能有三个人买票。第四个人来了之后就必须在后面等着,只有其他人买好了,才可以去相应的窗口进行买票 。作用和使用场景用于保证同一时间并发访问线程的数目。信号量在操作系统中是很重要的概念,Java并发库里的Semaphore就可以很轻松的完成类似操作系统信号量的控制。Semaphore可以原创 2021-12-11 15:52:20 · 17673 阅读 · 0 评论