![](https://img-blog.csdnimg.cn/20210522165243261.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
新并发编程
文章平均质量分 93
新并发编程
张井天
知其然,知其所以然!
展开
-
CountDownLatch
背景:countDownLatch是在java1.5被引入,跟它一起被引入的工具类还有CyclicBarrier、Semaphore、concurrentHashMap和BlockingQueue。存在于java.util.cucurrent包下。概念countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。是通过一个计数器来实现的,计数器的初始值是线程的数量。...转载 2019-10-24 19:37:49 · 226 阅读 · 0 评论 -
【线程池】threadPoolExecutor 中的 shutdown() 、 shutdownNow() 、 awaitTermination() 的用法和区别
使用到ThreadPoolExecutor时,其中包含 关闭方法(shutdown()、shutdownNow()、awaitTermination())下面一起来看看这三个方法:shutdown()将线程池状态置为SHUTDOWN,并不会立即停止:停止接收外部submit的任务 内部正在跑的任务和队列里等待的任务,会执行完 等到第二步完成后,才真正停止shutdownNow()...转载 2019-10-16 14:51:00 · 1316 阅读 · 0 评论 -
AbstractQueuedSynchronizer源码
AbstractQueuedSynchronizer源码解读:https://www.cnblogs.com/micrari/p/6937995.html#topJUC锁框架_AbstractQueuedSynchronizer详细分析: https://www.jianshu.com/p/0da2939391cf原创 2019-11-14 10:54:32 · 160 阅读 · 1 评论 -
【多线程】常用的方法
前言:上篇博文简单讲解了多线程的三种实现方式: https://blog.csdn.net/zhangyong01245/article/details/100593167本篇博文简单介绍一下 Thread 中常用的方法。先来看一下线程的状态方法:以下的方法在Thread 的源码中均可以查询到,有兴趣的小伙伴可以自行查阅。start() :使该线程开始执行;Java 虚拟机调用...原创 2019-09-11 20:24:48 · 172 阅读 · 0 评论 -
【线程池】ThreadPoolExecutor运行状态
线程池的5种状态:Running、ShutDown、Stop、Tidying、Terminated。线程池各个状态切换框架图:RUNNING:状态说明:线程池处在RUNNING状态时,能够接收新任务,以及对已添加的任务进行处理。状态切换:线程池的初始化状态是RUNNING。换句话说,线程池被一旦被创建,就处于RUNNING状态,并且线程池中的任务数为0!SHUTDO...转载 2019-10-16 14:43:49 · 1770 阅读 · 0 评论 -
ThreadLocal详解
前言:ThreadLocal 是线程内部的数据存储类,多线程操作 ThreadLocal 时,不同的线程对数据进行储存后,只有在当前线程中才可以获取到存储的数据,不同的线程之间数据隔离。ThreadLocal 数据的存储通过 get 和 set 方法来进行操作具体实现是因为不同的 线程中维护了一个数据 ThreadLocalMap( 其中table 数组存储数据) ,通过 ThreadLo...原创 2019-10-28 15:49:45 · 116 阅读 · 0 评论 -
深入理解volatile
前言:共享变量:共享变量是指可以同时被多个线程访问的变量,共享变量是被存放在堆里面,所有的方法内临时变量都不是共享变量。重排序:重排序是指为了提高指令运行的性能,在编译时或者运行时对指令执行顺序进行调整的机制。重排序分为编译重排序和运行时重排序。编译重排序是指编译器在编译源代码的时候就对代码执行顺序进行分析,在遵循as-if-serial的原则前提下对源码的执行顺序进行调整。as-if-se...转载 2019-10-26 16:51:23 · 137 阅读 · 0 评论 -
【多线程】实现:Thread、Runable、Callable
多线程的实现方式原创 2019-09-08 00:09:42 · 541 阅读 · 0 评论 -
【多线程】 Sleep、Wait、notify、notifyAll方法讲解
前言:sleep(1000) 是 Thread 中的方法,参数是sleep多少毫秒。sleep() 的作用是将当前线程暂停一段时间,但这期间不会释放锁wait、notify、notifyAll 是 Object 中的方法,可以作用于任何对象,用于控制线程的状态,通常配合 synchronized 代码块使用Sleep():sleep 的作用是使当前线程睡眠指定的时间,放弃对CPU的占...原创 2019-09-11 20:09:49 · 826 阅读 · 0 评论 -
Synchronized的简单使用
前言:在并发编程中会存在线程安全问题, 因为存在多线程共同操作共享数据的可能性。关键字 Synchronized 可以保证在同一个程序,同一时刻,只有一个线程可以执行某个方法或某个代码块,同时 Synchronized 可以保证一个线程的变化可见(可见性),可以代替 volatile。基本概念Synchronized 是JAVA 中解决并发问题最常用的方法,也是最简单的一种方法。Sync...原创 2019-10-10 15:28:41 · 141 阅读 · 0 评论 -
【多线程】Thread 方法:interrupt()、isInterrupted()、interrupted() 讲解
前言:三个方法,都是Thread中定义的方法,其中interrupted()是Thread中的静态方法:interrupt() : 给调用线程加入一个中断点,但是不会结束此线程。isInterrupted():返回此线程的中断状态,但是不会移除此线程中断状态。interrupted():返回的是当前线程的中断状态,会移除当前线程的中断状态isInterrupted()、interrupt...原创 2019-09-10 23:34:20 · 1089 阅读 · 2 评论 -
Java Cas详解
java.util.concurrent包完全建立在CAS之上的,没有CAS就不会有此包。可见CAS的重要性。CAS:CAS:Compare and Swap, 翻译成比较并交换。java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁。本文先从CAS的应用说起,再深入原理解析。CAS应用:CAS有3个操作数,内存值V,旧的预期值...转载 2019-10-31 18:06:10 · 576 阅读 · 1 评论 -
【线程池】ThreadPoolExecutor源码分析 -- execute、shutdown方法
简单介绍来个简单的例子ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 10,100, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10)); executor.execute(() -> { System.out.printl...转载 2019-10-16 15:02:42 · 395 阅读 · 0 评论 -
【线程池】四种创建方式
线程池简介线程池(英语:thread pool):线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。 例如,线程数一般取cpu数...原创 2019-10-10 16:21:45 · 1874 阅读 · 0 评论 -
【线程池】四种拒绝策略
前言:当我们初始化线程池时 ThreadPoolExecutor, 其中包含参数 RejectedExecutionHandler 拒绝策略。当线程池中 线程数量等于最大线程数量 且 任务队列已满时,则会执行线程池会对新增加的任务执行拒绝策略。ThreadPoolExecutor 中默认帮我们实现了 4 中拒绝策略,我们也可以自己实现,需要 RejectedExecutionHandl...原创 2019-09-19 10:31:26 · 4055 阅读 · 0 评论 -
CLH锁 、MCS锁
一.引文1.1 SMP(Symmetric Multi-Processor):对称多处理器结构,指服务器中多个CPU对称工作,每个CPU访问内存地址所需时间相同。其主要特征是共享,包含对CPU,内存,I/O等进行共享。SMP能够保证内存一致性,但这些共享的资源很可能成为性能瓶颈,随着CPU数量的增加,每个CPU都要访问相同的内存资源,可能导致内存访问冲突,可能会导致CPU资源的浪费。常用的PC...转载 2019-11-05 16:47:23 · 202 阅读 · 0 评论 -
Synchronized详解
1、说明:随着JavaSE 1.6 对 Synchronized 进行的各种优化后, Synchronized 并不会显得那么重了。Synchronized 可以把任何一个 非 null 对象作为锁,锁有个专门的名字 对象监视器(Object Monitor)2、Synchronized 的三个作用:原子性: 确保线程互斥的访问同步代码。可见性:保证共享变量的修改能够及时看见,其实是通过 JMM来保证的对一个变量 unlock 操作之前,必须要同步到主内存中;如果一个变量进行lock操转载 2021-05-24 19:30:55 · 249 阅读 · 1 评论