
JUC
youngyang的博客
一只快乐的后端开发程序猿,Java爱好者,欢迎大家多多指教,互相学习!!
展开
-
一文读懂synchronized的锁优化
在JDK1.6之后,JVM团队对Java中的synchronized进行了优化,接下来让我们看看他们是如何进行优化的吧。jdk1.6之前的synchronizedJVM是基于进入和退出Monitor对象来实现方法同步和代码块同步。众所周知,synchronized是一个关键字,此关键字可以使作用在方法上或者是同步代码块中。如下:虽然两者都是使用synchronized进行了同步修饰,都能保证同步,也就是同一时刻只有一个线程在执行,但是他们还是有一点区别的。方法上的synchronized原创 2020-07-07 16:42:12 · 301 阅读 · 0 评论 -
线程池的五种状态详解
线程池的5种状态:Running、ShutDown、Stop、Tidying、Terminated。最好的学习方式就是看源码,众所周知,创建线程池肯定会使用到ThreadPoolExecutor类,其中ThreadPoolExecutor的源码的注释不仅讲述了线程池的几种状态,还详细讲解了什么时候或者调用什么方法之后进行状态转换,如下:线程池各个状态切换框架图:1、RUNNING(1) 状态说明:线程池处在RUNNING状态时,能够接收新任务,以及对已添加的任务进行处理。(02) 状态切换:原创 2020-06-29 14:58:51 · 9012 阅读 · 0 评论 -
同步器的基础之队列同步器AQS
1 AQS 简单介绍AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于AQS的。当然,我们自己也能利用AQS非常轻松容易地构造出符合我们自己原创 2020-06-23 11:43:15 · 293 阅读 · 0 评论 -
一问读懂同步和异步
”同步“就好比:你去外地上学(人生地不熟),突然生活费不够了;此时你决定打电话回家,通知家里转生活费过来,可是当你拨出电话时,对方一直处于待接听状态(即:打不通,联系不上),为了拿到生活费,你就不停的oncall、等待,最终可能不能及时要到生活费,导致你今天要做的事都没有完成,而白白花掉了时间。“异步”就是:在你打完电话发现没人接听时,猜想:对方可能在忙,暂时无法接听电话,所以你发了一条短信(或者...原创 2020-05-04 21:38:40 · 206 阅读 · 0 评论 -
适合初学者的JUC并发包讲解
在Java中,线程部分是一个重点,本篇文章说的JUC也是关于线程的。JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK 1.5开始出现的。下面一起来看看它怎么使用。知识回顾进程和线程进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元...原创 2019-11-15 18:44:07 · 413 阅读 · 0 评论 -
JUC之阻塞队列BlockingQueue
在java.util.concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的一些成员,包括他们各自的功能以及常见使用场景。BlockingQueue优势多线程环境中,通过队列可以很容易实现数据共享,比如经典的“...原创 2019-11-14 22:30:56 · 209 阅读 · 0 评论 -
初学者也能看懂的线程池详解
线程池的优势线程池做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。它的主要特点为:线程复用;控制最大并发数;管理线程。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的销耗。第二:提高响应速度。当任务到达时,任务可以不需要等待线程创建...原创 2019-11-14 22:00:31 · 163 阅读 · 0 评论