![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发
文章平均质量分 94
dvdffd
桐花思雨
这个作者很懒,什么都没留下…
展开
-
线程池中线程抛了异常,该如何处理?
在实际开发中,我们常常会用到线程池,但任务一旦提交到线程池之后,如果发生异常之后,怎么处理?怎么获取到异常信息?在了解这个问题之前,我们知道程池的提交方式有。两种方式,接下来分别使用他们执行带有异常的任务!我们先用伪代码模拟一下线程池抛异常的场景。原创 2022-10-15 20:50:17 · 436 阅读 · 0 评论 -
Java中的线程池回顾总结
目录线程池介绍线程池的优势线程池的状态线程池介绍线程池的优势降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁所造成的系统资源消耗提高系统响应速度,当有任务到达时,通过复用已存在的线程,任务可以不需要等待新线程的创建便能立即执行提高线程的可管理性,方便线程并发数的管控。如果线程无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,可能也会导致内存占用过多而产生 OOM提供更强大的功能,延时定时线程池线程池的状态ThreadPoolExecutor 类中使用 int 的高 3 位原创 2022-01-23 21:37:34 · 552 阅读 · 0 评论 -
Java并发之Condition接口
目录`Condition` 接口简介Condition 接口简介任意一个 Java 对象都拥有一组监视器方法(定义在 java.lang.Object 上),主要包括 wait()、wait(long timeout)、notify() 以及 notifyAll() 方法,这些方法与 synchronized 同步关键字配合,可以实现线程之间的等待,通知(通信)Condition 接口也提供了类似 Object 的监视器方法,与 Lock 配合也可以实现线程之间的等待,通知(通信),但是这两者在使用方原创 2021-10-06 13:27:22 · 240 阅读 · 0 评论 -
Semaphore源码解读
目录`Semaphore` 概述`Semaphore` 源码类图构造器及内部类Semaphore 概述Semaphore 来自于 JDK 1.5 的 JUC 包,直译过来就是 信号量,被作为一种多线程并发控制工具来使用Semaphore 可以控制同时访问共享资源的线程个数,线程通过 acquire() 方法获取一个信号量,信号量减一,如果没有就等待;通过 release() 方法释放一个信号量,信号量加一它通过控制信号量的总数量,以及每个线程所需获取的信号量数量,进而控制多个线程对共享资源访问的并原创 2021-09-22 12:48:27 · 226 阅读 · 0 评论 -
线程的创建方式及Runnable与Callable的区别
目录线程的创建方式及 Runnable 与 `Callable` 的区别线程的创建方式继承 `Thread` 类实现 `Runnable` 接口`Runnable` 与 `Callable` 的源码线程的创建方式及 Runnable 与 Callable 的区别线程的创建方式线程的创建方式继承 Thread 类实现 Runnable 接口实现 Callable 接口线程池创建线程继承 Thread 类public class ThreadTest extends Thread {原创 2021-09-07 20:12:05 · 378 阅读 · 0 评论 -
线程池Executor框架解读
目录`Executor` 整体架构Executor 整体架构接口/类说明Executor该接口只有一个execute方法,目的是将任务提交和执行解耦ExecutorService该接口对Executor接口进行了拓展,定义了对线程池中线程的管理方法AbstractExecutorService对ExecutorService接口中部分方法的实现ThreadPoolExecutor线程池的最终实现,实现了线程池工作的完整机制,是整个框架的重点ForkJoinPool实现了Fork/Join模式的线程池S原创 2021-05-30 09:29:02 · 510 阅读 · 0 评论 -
并发队列之无界阻塞队列LinkedBlockingQueue
目录`LinkedBlockingQueue` 概述`LinkedBlockingQueue` 源码`LinkedBlockingQueue` 数据结构(单链表)`LinkedBlockingQueue` 主要属性LinkedBlockingQueue 概述LinkedBlockingQueue 来自于 jdk 1.5 的 JUC 包,是一个支持并发操作的有界阻塞队列,底层数据结构是一个单链表作为有界队列,容量范围是{1, Integer.MAX_VALUE},可以指定容量,如果未指定容量,则默认容原创 2021-05-26 01:24:58 · 1389 阅读 · 0 评论 -
并发队列之无容量阻塞队列SynchronousQueue
目录`SynchronousQueue` 简述SynchronousQueue 简述SynchronousQueue 来自于 jdk 1.5 的 JUC 包,是一个支持并发操作的阻塞队列SynchronousQueue 不能简单的使用有界或无界来形容,因为它的内部根本就没有容量SynchronousQueue 中每个插入操作必须等待另一个线程的对应移除操作,反之亦然;两个操作是同步等待的,即一个先到达的操作必须等待另一个匹配的操作出现,两个操作才能成功匹配并传递数据之后返回Synchronous原创 2021-05-26 14:43:54 · 538 阅读 · 2 评论 -
并发队列之有界阻塞队列ArrayBlockingQueue
目录`ArrayBlockingQueue` 简述ArrayBlockingQueue 简述ArrayBlockingQueue 来自于 jdk 1.5 的 JUC 包,是一个线程安全的有界阻塞队列原创 2021-06-06 23:15:32 · 560 阅读 · 2 评论 -
CyclicBarrier源码解读
目录认识`CountDownLatch``CountDownLatch` 应用场景`CountDownLatch` 核心方法`CountDownLatch` 使用举例认识 `CyclicBarrier``CyclicBarrier` 源码`CountDownLatch` 和 `CyclicBarrier`共同点不同点认识CountDownLatchCountDownLatch 是 java.util.concurrent 包下面的多线程工具类 CountDownLatch:用给定的计数初始化,awai原创 2021-04-14 22:43:28 · 332 阅读 · 0 评论 -
CountDownLatch源码解读
目录`CountDownLatch` 概述`CountDownLatch` 源码CountDownLatch 概述CountDownLatch 来自于 jdk 1.5 的 JUC 包,是一种同步工具,常被称为闭锁,也叫做倒计数器这类似于在开始某个行为之前的准备操作。比如有一个任务 A,它要等待其他 4 个任务执行完毕之后才能执行,此时就可以利用CountDownLatch 来实现这种功能了。或者说 CountDownLatch 是一个同步辅助类,允许一个或多个线程等待其他线程完成操作它的实现是基于原创 2021-05-24 19:01:58 · 218 阅读 · 0 评论 -
关于Synchronized
目录`synchronized` 锁的是什么同步方法测试示例一synchronized 锁的是什么在一些业务简单或某些单机系统不要求高性能高效率问题的情况下,可以使用 synchronized 进行线程安全处理,那么 synchronized 它到底锁的是什么同步方法测试示例一public class SynchronizedTest { public synchronized void test() { System.out.println("test 方法开始调用...原创 2021-05-21 16:25:12 · 296 阅读 · 0 评论 -
ReentrantReadWriteLock源码解读
目录`ReentrantReadWriteLock` 概述ReentrantReadWriteLock 概述ReentrantReadWriteLock 来自于 jdk 1.5,位于 JUC 包的 locks 子包。实现了ReadWriteLock 接口它本身没有实现 Lock 接口,因为 ReentrantReadWriteLock 看起来就像一个容器,内部维护了 ReadLock 和 WriteLock 两把锁,我们主要是获取这两把锁,然后使用这两把锁来实现同步,因此对于 Lock 的实现交给原创 2021-05-20 18:03:32 · 298 阅读 · 0 评论 -
ReentrantLock源码解读
目录`ReentrantLock` 概述可重入性ReentrantLock 概述ReentrantLock 来自于 jdk 1.5,位于 JUC 包的 locks 子包,独占(互斥)式可重入锁。Synchronized 的功能他都有,并且具有更加强大的功能实现了 Lock 接口,具有通用的操作锁的方法。内部是使用 AQS 队列同步器来辅助实现的,重写了 AQS 的获取独占式锁的方法,并实现了可重入性ReentrantLock 还具有公平与非公平两个获取锁模式,这个并非 AQS 提供的,而是Ree原创 2021-05-20 13:02:51 · 200 阅读 · 0 评论 -
Java中的AQS
目录`AQS` 概述`AQS` 框架内部探究`AQS` 框架内部`AQS` 访问同步状态 `state`AQS 概述AbstractQueuedSynchronizer 来自于 jdk 1.5,位于 juc 包中,简称为 AQS类如其名,抽象的队列式的同步器,AQS 定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的 ReentrantLock,CountDownLatchAQS 框架内部探究AQS 框架内部AbstractQueuedSynchronizer 被原创 2021-05-19 15:56:59 · 677 阅读 · 1 评论 -
Java中的CAS
CAS 思想产生的背景在 jdk1.5 之前 Java 语言是靠 synchronized 关键字保证同步的,而 synchronized 的锁机制存在以下问题:在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题一个线程持有锁会导致其它所有需要此锁的线程挂起如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险volatile 是不错的机制,但是 volatile 不能保证原子性。因此对于同步最终还是要回到锁机制上来。在此情况下,CAS 思想原创 2021-03-17 19:16:45 · 384 阅读 · 2 评论 -
并发编程之Lock接口
Lock 接口简述Lock 接口是 java.util.concurrent.locks 包下的接口,它是 jdk 1.5 后新增的Lock 接口的类图如下原创 2021-02-13 22:59:53 · 191 阅读 · 2 评论 -
并发编程之ReadWriteLock接口
前言在没有读写锁之前,ReentrantLock 和 Synchronized 虽然可以保证线程安全,但是也浪费了一定的资源因为如果多个读操作同时进行,其实并没有线程安全问题,我们可以允许让多个读操作并行,以便提高程序效率但是写操作不是线程安全的,如果多个线程同时写,或者在写的同时进行读操作,便会造成线程安全问题我们的读写锁就解决了这样的问题,它设定了一套规则,既可以保证多个线程同时读的效率,同时又可以保证有写入操作时的线程安全。整体思路是它有两把锁:第 1 把锁是写锁,获得写锁之后,既可以读数原创 2021-02-14 15:19:23 · 222 阅读 · 2 评论