![](https://img-blog.csdnimg.cn/20190904142604732.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
多线程与高并发
justry_deng
很多不会不懂不了解不明白,我只是一个善于记录的普通coder
展开
-
Fork/Join浅探与使用
声明: 本文部分文字介绍,直接摘录自《精通Java并发编程(第二版)》, 该书写得通俗易懂、且分析相对透彻,推荐阅读,具体信息见文末。声明: 本文不会介绍具体的方法调用API,但是给出CountedCompleter<T>、RecursiveTask<V>、RecursiveAction的简单使用示例。序言: JDK8开始,提供/优化了很多非常好用的并发组件,如parallelStream、CompletableFuture、ForkJoin等,本文初步学习ForkJoin。原创 2020-07-31 13:45:23 · 601 阅读 · 0 评论 -
CompletableFuture
声明: 本文这里只整理说明JDK8中的CompletableFuture, 暂不包含后续版本JDK新增的API方法。方法简述:方法简述runAsync无返回值的异步执行supplyAsync有返回值的异步执行whenComplete(同一个异步线程)消费前面future的异步结果注:无消费返回值、有future返回值。whenCompleteAsync(线程池分配的异步线程)消费前面future的异步结果注:无消费返回值、有future返回值。run原创 2020-06-20 18:43:31 · 983 阅读 · 0 评论 -
捕获异步线程异常的常用方式
声明: 捕获异步线程异常的方式有很多,本文只介绍(并示例)几种相对常用的方式。捕获异步线程异常的常用方式(结论):开启线程的方式使用线程池的情况捕获异步线程异常的常用方式Thread不使用线程池1. Thread.setDefaultUncaughtExceptionHandler设置默认的线程异常处理器。2. Thread实例.setUncaughtExcepti...原创 2020-05-01 14:42:38 · 6891 阅读 · 1 评论 -
线程池构造函数各参数说明、参数间逻辑流程图
目录阿里巴巴推荐用以下方式来创建线程池创建调度线程池ScheduledExecutorService创建公共线程池ExecutorService直接在spring配置文件中配置线程池线程池构造函数各参数说明corePoolSize(数据类型int)maximumPoolSize(数据类型int)keepAliveTime(数据类型long)与unit(数据类型Tim...原创 2019-04-16 13:17:45 · 2732 阅读 · 0 评论 -
CAS算法与ABA问题
锁是用来做并发最简单的方式,当然代价也是最高的。独占锁是一种悲观锁,synchronized就是一种独占锁;它假设最坏的情况,并且只有在确保其它线程不会造成干扰的情况下执行,会导致其它所有需要锁的线程挂起直到持有锁的线程释放锁。所谓乐观锁就是每次不加锁,假设没有冲突而去完成某项操作;如果发生冲突了那就去重试,直到成功为止。CAS(Compare And Swap)是一种有名的无锁算法。...原创 2018-10-27 20:08:40 · 14630 阅读 · 2 评论 -
JUC之atomic包
相关概念之原子性: 原子性是指一个操作或多个操作要么全部执行,且执行的过程不会被任何因素打断,要么都不执行。atomic包是java.util.concurrent下的一个专门为线程安全设计的java包,该包下包含多个原子操作类:atomic包下相对常用的类有: AtomicInteger、AtomicIntegerArray、AtomicBoolean...原创 2018-10-26 12:37:36 · 304 阅读 · 0 评论 -
JUC同步容器之ConcurrentHashMap、COW
在介绍同步容器之前,让我们先回顾一下有哪些常见的线程安全的类、有哪些非线程安全的类: 对于这些线程不安全的类,我们可以主动使用synchronized关键字或Lock锁来使其线程安全,但是这样一来效率就变低了;而如果不使用synchronized关键字或Lock锁,那么又线程不安全。JUC就给我们提供了一些不需要我们主动使用synchronized或Lock来保证线程安全(内...原创 2018-10-25 15:49:04 · 611 阅读 · 0 评论 -
JUC之CyclicBarrier循环屏障
举例说明CyclicBarrier循环屏障: 游乐园水上划船,规定5个人划一艘船,如果人不够,那么就需要等待,直到凑齐5个人了,才允许开始。也就是说,5个人一波5个人一波。每一波都是同一时间开始玩的。即:循环屏障保证了多个线程在准确的同一刻开始。注:CyclicBarrier循环屏障适用于多线程必须同时开始的情景。代码示例import java.util.Date...原创 2018-10-17 20:35:31 · 491 阅读 · 0 评论 -
多线程高并发相关基础概念
程序、进程、线程程序: 程序是静态的概念,windows下通常指exe文件,程序也可以说是编译后的文件(.jar、.war等);操作系统打开一共应用程序,实际上是新打开了一个进程。进程: 进程是动态的概念,是程序运行时的状态。一个程序可以有多个进程,进程之间互不影响彼此隔离。线程: 线程是进程里的一个基本任务,每个线程都有自己的功能...原创 2018-10-10 02:07:46 · 1784 阅读 · 0 评论 -
JUC之Semaphore信号量
声明:先给出图片版划出重点,本文末统一给出文字版!举例说明Semaphore信号量: 游乐园有100个人买了攀爬的票,但是攀爬的绳子只准备了20条(这就是信号量),那么最多同时只能有20个人享受攀爬,其余的人只有在下面等待,只有当有人攀爬结束后,才会有空的位置让出来给哪些等待的人。注:很多服务器为了保证游戏等的体验,对玩家数量(线程)的限制就是通过信号量来实现的。 ...原创 2018-10-16 00:45:41 · 880 阅读 · 0 评论 -
JUC之CountDownLatch倒计时锁
CountDownLatch倒计时锁特别适合处理“总-分任务”,例如:多线程计算后的数据汇总、多线程导入多个sheet然后数据汇总等。CountDownLatch类位于java.util.concurrent包下(即:JUC包下),利用它可以实现类似计数器的功能。比如:任务A,他要等待其他几个任务执行完毕之后才能执行,此时就可以利用CountDownLatch倒计时锁来实现这个功能。执行原...原创 2018-10-15 23:33:50 · 510 阅读 · 0 评论 -
并发工具包与线程连接池
并发是伴随着多核处理器的诞生而“席卷大地”的,为了充分利用硬件资源,诞生了多线程技术。但是多线程又存在资源竞争的问题,引发了同步和互斥的问题,JDK1.5推出的java.util.concurrent(简称JUC)并发工具包,就是专门来解决这些问题的。new Thread的弊端: new Thread新建对象,性能差。 线程缺乏统一的管理,可能无限制的新建线程,...原创 2018-10-11 20:22:01 · 653 阅读 · 2 评论 -
悲观锁之ReentrantLock实现
为了保证多线程下的数据安全、线程安全,便于管理多线程等,JDK1.5开始提供给我们的JUC包(java.util.concurrent),改包下的Lock接口,常用语来作线程同步。 Lock的主要实现就是ReentrantLock可重入锁。 前面已经介绍了synchronized关键字如何实现线程安全的同步,下面介绍一个更为灵活的Lock接口来实现多线...原创 2018-09-05 00:51:24 · 767 阅读 · 0 评论 -
悲观锁之synchronized关键字的使用、分析
声明本人测试代码,放在本文末尾,复制可用 为方便说明,前面主要以图片为主,进行示例为了保证多线程下的数据安全、线程安全,JDK给我们提供了synchronized关键字来线程同步。synchronized关键字实现线程同步的方式有 使用同步方法(普通方法、静态方法) 使用同步代码块儿 关键概念说明 任何Object都有且仅有一个属于它自己的内...原创 2018-08-28 15:52:30 · 596 阅读 · 0 评论 -
Java创建线程的三种方式
先给出图片版(标出关键代码),再给出文字版!话不多说,直接上示例代码吧!创建线程之继承Thread类给出文字版:/** * 创建线程 --- 测试 * * @author JustryDeng * @date 2018/10/11 14:52 */public class CreatThreadByExtendsThread { public static...原创 2018-10-11 17:10:32 · 464 阅读 · 5 评论