![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
文章平均质量分 71
tom有了cat
积跬步,以至千里
展开
-
synchronized关键字再回顾-脏读-可重入-锁升级
锁原理,锁升级原创 2022-05-06 12:11:22 · 231 阅读 · 0 评论 -
ThreadLocal源码
为什么ThreadLocal存储的是当前线程的数据???原创 2022-05-05 17:00:51 · 435 阅读 · 0 评论 -
队列同步器-AQS-接口与示例
队列同步器AbstractQueuedSynchronizer是用来构建锁或者其他同步组件基础的框架,它使用了一个int成员表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。 使用方式:继承 提供的三个方法:getState(),setState(int newState),compareAndSetState(int expect,int update)。这三个方法能够保证状态的改变是安全的。子类推荐被定义为自定义同步组件的静态内部类,同步器自身...原创 2021-03-24 14:30:02 · 206 阅读 · 0 评论 -
java 并发工具类控制并发线程数的Semaphore
Semaphore(信号量) 是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。 可以把它理解为红绿灯,当车流量非常的的时候这个时候我们就得考虑去限流了,这个红绿灯就是我们的限流方式,类似这个工具类Semaphore。 当一些公共资源有限的时候我们可以使用这个工具类。 package juc; import java.uti...原创 2019-05-27 19:23:42 · 189 阅读 · 0 评论 -
java并发工具类学习同步屏障CyclicBarrier
CyclicBarrier这个工具类要做的事情是让一组线程到达同一个屏障时被阻塞,直到最后一个线程到达屏障时屏障才会开门,所有被屏障拦截的线程才会继续运行。 测试代码如下: import java.util.concurrent.CyclicBarrier; /** * @Description * @Author DJZ-WWS * @Date 2019/5/27 15:36 *...原创 2019-05-27 17:15:28 · 192 阅读 · 0 评论 -
java并发工具类学习之CountDownLatch
CountDownlatch允许一个线程或者多个线程等待其他线程完成操作。 假如有这样一个需求: 我们需要解析一个Excel里面的多个sheet的数据,此时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有sheet都解析完了,程序需要提示解析完成。 使用CountDownLatch实现如下: import java.util.concurrent.CountDown...原创 2019-05-27 15:30:05 · 195 阅读 · 0 评论 -
线程池学习之线程池任务拒绝策略
在上面的一篇文章中讲到了线程池的执行流程,使用起来很简单。对于线程池的任务拒绝策略没有过多的介绍,本文主要介绍线程的四种拒绝策略。 RejectedExecutionHandler提供了多种方式来处理任务拒绝策略 通过观察源码可知:所有的拒绝策略他们都实现了RejectedExecutionHandler 1、直接丢弃(DiscardPolicy) 2、丢弃队列中最老的任务(Disca...原创 2019-05-23 09:40:07 · 2437 阅读 · 0 评论 -
线程池学习之实际应用规范
线程池的原理,线程池的工作机制以及线程池的拒绝策略在前面的文章已经很完整的写清楚,但是对于实际开发怎么选择呢? 在阿里巴巴java开发手册这样写道: Executors实现几种创建线程池方式如上图,考虑线程的性能当然要考虑线程池的存储底层结构,LinkedBlockingQueue是一个无界阻塞队列,只不过他的存储长度为Integer的最大21亿左右。 当有大量的并发时,队...原创 2019-05-26 17:02:56 · 419 阅读 · 0 评论 -
线程池学习之线程池的工作过程
看一下线程池的核心类ThreadPoolExecutor中的构造器 它有七个参数 int corePoolSize: 这个参数是线程池核心工作线程,就像去银行一样,他所有的窗口不一定都开。假设银行总共有6个窗口,开了三个,这3个就是我们的核心线程数即corePoolSize。 int maximumPoolSize: 这个参数是最大线程数的意思。就像上面的例子说的银行总共开了6个窗口,这...原创 2019-05-21 20:01:25 · 2696 阅读 · 0 评论 -
java并发编程基础之Thread.join()的使用
join翻译为加入的意思,顾名思义,就是在其他线程正在执行的时候加入到其中,并且优先于其他线程,直到自己这个线程执行完毕。 下面是一个简单的例子 package juc.thread; import java.util.concurrent.TimeUnit; /** * @Description * @Author DJZ-WWS * @Date 2019/5/15 15:14 ...原创 2019-05-15 15:51:11 · 155 阅读 · 0 评论 -
java并发编程基础之等待通知机制wait/notify原理分析
一个线程修改了一个对象的值,而另一个线程感知了变化,然后进行了相应的操作,整个过程开始于一个线程,结束于另一个线程。前者是生产者,后者是消费者,这种模式在功能层面上实现了解耦。 有下面一段代码,大家可以根据执行的结果和注释很清晰的明确这个wait和notify的工作机制,wait等待释放锁。代码如下,不再做具体描述: pac...原创 2019-05-15 14:55:12 · 1322 阅读 · 0 评论 -
java并发编程基础之如何优雅的关闭线程
在前面的文章已经解释了中断的概念,它可以控制线程的中断状态,线程根据状态可以选择是否关闭线程 ,但是这样去关闭线程是不是有点粗鲁?有一种更优雅额方式实现线程的关闭,通过给线程加个开关,通过控制这个开关去实现线程的关闭。代码实现如下。 package juc.thread; /** * @Description 一个线程任务 * @Author DJZ-WWS * @...原创 2019-05-15 10:58:19 · 240 阅读 · 0 评论 -
java并发编程基础之Finally代码块一定会被执行吗?
在我们的印象里一般都会用finally去关闭一些资源,因为这个被finally包裹的代码块一定会执行,但是存在这样一种情况,finally代码块是不会执行的。在Daemon线程里。 Daemon线程是一种支持型的线程,主要被用作程序中后台调度及支持性工作。如果一个java虚拟机中不存在非Daemon线程的时候,java虚拟机将会推出。我们可以将Thread.setDae...原创 2019-05-15 10:12:07 · 340 阅读 · 0 评论 -
java并发编程基础之线程中断interrupt
有这样一个场景,用户下载一个文件,由于网速比较慢,下载了一部分,想退出,不下想下载了,这时就需要我们的中断机制。 中断机制就是通知线程,让线程有一个中断的状态,对于线程对中断的识别,线程在不同的状态下可以对中断的处理也不是一样。这里涉及线程的几种状态,又不是很熟悉的可以查一下。 这里涉及的线程如下: 这个线程测试开始,运行的状态 package juc.thread; /** ...原创 2019-05-15 09:48:51 · 187 阅读 · 0 评论