【多线程】公平锁和非公平锁

公平锁公平锁其实很好理解,可以看作我们现实生活中的排队取餐,按照先来先得的规矩来依次取餐,公平锁也是这样,当有线程排队获取锁的同时,等待越久的线程则优先获取锁,这样就能保证每个线程获取锁的顺序和公平性。场景假设有4个线程来尝试获取锁,当线程1获取到锁之后,线程2、3、4就会在队列中等待,然后等到线程
多线程 2022年03月27日 113次浏览

【多线程】synchronized与Lock的区别

相同点都是用来保护资源线程安全的都可以保证可见性可见性大致可以这样理解,线程A的加解锁的过程会对B线程完全可见,也就是说,线程A的加锁和解锁当时的锁持有的状态,线程B是可以获取到的,这也就体现到了hanppens-before针对synchronized的一个原则。对于Lock而言,他也是可以保证线
多线程 2022年03月23日 108次浏览

【多线程】synchronized背后的monitor锁

monitor的作用我们都知道synchronized的作用是用来保证修饰的代码或者方法执行有且只有一个线程执行,也就是锁。那么在执行被锁住的方式时,synchronized就需要通过monitor来记录和保证锁的状态。所以monitor这里的作用其实就是起到了控制synchronized什么时候获
多线程 2022年03月21日 111次浏览

【多线程】什么是悲观锁和乐观锁

悲观锁概念悲观锁在已最坏的打算来考虑结果,它会在每次资源操作的同时,都需要对他进行加锁,避免其他的线程来抢占。在绝对上保证我这次执行是没有问题的。适用场景悲观锁适用于竞争激励的场景,例如高并发的读写操作。典型案例synchronized关键字publicclassTestLockimplements
多线程 2022年01月30日 166次浏览

【多线程】锁的七大分类

锁的七大类在Java的多线程中,有很多种锁,每种锁可能同时占有多个标准,比如ReentranLock即可是中断锁,又可以是可重入锁。那么根据分类标准,我们可以把这些锁分为以下七大标准,分别是:偏向锁/轻量级锁/重量级锁可重入锁/非可重入锁共享锁/独占锁公平锁/非公平锁悲观锁/乐观锁自旋锁/非自旋锁可
多线程 2022年01月20日 191次浏览

【多线程】线程复用的原理

在了解线程复用原理之前,我们再回顾一下之前在线程池的初始配置详解的文章中提到的创建线程的流程
多线程 2021年12月27日 161次浏览

【线程池】如何正确的关闭线程池

关闭线程池的方法shutdown()在调用这个关闭方法时,线程池会根据我们配置的拒绝策略来拒绝掉想要进来的线程,也就是说吧创建执行线程的入口给关闭掉了,直到线程池内的所有线程都执行完成。在调用这个方法完毕之后,并不代表这个线程池就真的都停掉了,只能说他不让其他线程进来了,然后等到线程池内的线程执行完
多线程 2021年12月26日 155次浏览

【线程池】如何正确的配置一个线程池

我们在创建自己的线程池时,会时常因为不知道给核心线程数或者最大线程数设置多少为好,其实这个时需要看你的线程池的使用场景和服务器CUP的配置,根据这些前置条件,我们再去判断如何去设置合适的线程数,并不是我们想设置多少线程数大小就可以设置多少,这样可能会导致线程发挥不到最大的性能,甚至还有可能会导致服务
多线程 2021年12月17日 152次浏览

【线程池】常用的三种阻塞队列

简介我们在了解完线程池的参数配置和常用线程池后发现,每种线程池会根据不同的需求去选择不同的队列来存储线程任务。线程池的对应队列如下:可以看到,五大常用的线程池,会用到三种线程池LinkedBlockingQueueLinkedBlockingQueue是一种没有容量上限的队列,也就是说,用了这个队列
多线程 2021年12月17日 188次浏览

【线程池】线程池的4种拒绝策略

线程被拒绝的场景首先我们现在思考一个问题,当我们创建一个线程池的时候,他会有最大的线程数,和线程任务缓存数。如果系统的线程任务突然暴增,这个时候,线程池的线程达到最大值,线程队列中的缓存数也达到了最大值,这个时候,没有挤进线程池的该怎么办。在使用线程池的时候,可能会遇到两种情况,导致线程会需要被拒绝
多线程 2021年12月16日 226次浏览