
多线程
多线程
MR~许先生
开始学习
展开
-
并发工具四之线程池
线程池原创 2020-07-01 12:41:56 · 474 阅读 · 0 评论 -
并发工具三之CyclicBarrier
一、CyclicBarrier简介CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续工作。CyclicBarrier 默认的构造方法是 CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用 await 方法告诉 CyclicBarrier 当前线程已经到达了屏障,然后当前线程被阻塞二、原创 2020-06-27 16:37:35 · 193 阅读 · 0 评论 -
并发工具二之Semaphore
一、Semaphore简介semaphore 也就是我们常说的信号灯,semaphore 可以控制同时访问的线程个数,通过 acquire 获取一个许可,如果没有就等待,通过 release 释放一个许可。有点类似限流的作用。二、Semaphore使用案例semaphore叫信号灯的原因也和他的用处有关,比如某商场就3 个停车位,每个停车位只能停一辆车,如果这个时候来了 10 辆车,必须要等前面有空的车位才能进入。定义一个停车的线程,每次都先去获取令牌(acquire),然后再释放令牌(releas原创 2020-06-27 15:43:22 · 195 阅读 · 0 评论 -
并发工具一之CountDownLatch
并发工具原创 2020-06-26 23:15:28 · 201 阅读 · 0 评论 -
并发编程之阻塞队列
阻塞队列原创 2020-06-25 23:36:53 · 171 阅读 · 0 评论 -
Condition的源码分析和简单认识
awaitsignal原创 2020-06-14 23:26:44 · 193 阅读 · 0 评论 -
从ReentrantLock源码分析,理解AQS应用
认识AQS及浅析实现原理原创 2020-06-07 22:17:48 · 169 阅读 · 0 评论 -
AQS的源码简答分析-AQS结构
AQS是什么?在 Lock 中,用到了一个同步队列 AQS,全称AbstractQueuedSynchronizer,它是一个同步工具也是 Lock 用来实现线程同步的核心组件。如果你搞懂了 AQS,那么 J.U.C 中绝大部分的工具都能轻松掌握。AQS的两种功能从使用层面来说,AQS 的功能分为两种:独占和共享独占锁,每次只能有一个线程持有锁,比如 J.U.C包下的的 ReentrantLock 就是以独占方式实现的互斥锁共 享 锁 , 允 许 多 个 线 程 同 时 获 取 锁 , 并 发 访原创 2020-06-01 23:09:22 · 208 阅读 · 0 评论 -
认识传说中的CAS
认识传说中的CAS原创 2020-05-30 23:28:23 · 264 阅读 · 0 评论 -
一点点ThreadLocal的原理分析
一点点ThreadLocal的原理分析原创 2020-05-30 00:39:14 · 140 阅读 · 0 评论 -
手把手教你写一个死锁
之前看到一个小伙伴分享的面试题,笔试阶段让写一个死锁,有点意思。什么是死锁、活锁?学过多线程,大家多锁应该不陌生死锁: 一组互相竞争资源的线程因互相等待,导致“永久”阻塞的现象。活锁: 活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复“”尝试—失败—尝试—失败“”的过程。处于活锁的实体是在不断的改变状态,活锁有可能解开继续往下运行。死锁发生的条件?这四个条件同时满足,就会产生死锁。1.互斥,共享资源 X 和 Y 只能被一个线程占用;2.占有且等待,线程 T1 已经取得共原创 2020-05-29 16:43:06 · 1187 阅读 · 1 评论 -
join、yield、sleep方法的认识
一、join()方法(插队)/** * Waits for this thread to die. * * <p> An invocation of this method behaves in exactly the same * way as the invocation * * <blockquote> * {@linkplain #join(long) join}{@code (0)} * &l原创 2020-05-29 15:30:14 · 251 阅读 · 0 评论 -
线程之间通信方式讲解
线程通信 wai/notify原创 2020-05-29 14:38:19 · 233 阅读 · 0 评论 -
Happen-before原则的浅谈
Happens-Before模型除了我们常见的显示引用volatile关键字能够保证可见性以外,在Java中,还有很多的可见性保障的规则。从JDK1.5开始,引入了一个happens-before的概念来阐述多个线程操作共享变量的可见性问题。所以我们可以认为在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作必须要存在happens-before关系。这两个操作可以是同一个线程,也可以是不同的线程。程序顺序规则(as-if-serial语义)a.不能改变程序的执行结果(在单线程环境原创 2020-05-29 13:24:16 · 566 阅读 · 0 评论 -
java内存模型(JMM模型)
java内存模型(JMM模型)原创 2020-05-29 12:14:35 · 948 阅读 · 0 评论 -
内存屏障的简单介绍
JMM 层面的内存屏障为了保证内存可见性,Java 编译器在生成指令序列的适当位置会插入内存屏障来禁止特定类型的处理器的重排序,在 JMM 中把内存屏障分为四类看过volatile关键字底层实现我们会发现,源码中就应用了内存屏障storeload()本文是综合自己的认识和参考各类资料(书本及网上资料)编写,若有侵权请联系作者,所有内容仅代表个人认知观点,如有错误,欢迎校正; 邮箱:1354518382@qq.com 博客地址:https://blog.youkuaiyun.com/qq_35576976/.原创 2020-05-29 12:15:00 · 331 阅读 · 0 评论 -
缓存一致性协议(MESI)的简单认识
缓存一致性协议(MESI)原创 2020-05-28 19:46:19 · 1182 阅读 · 1 评论 -
线程安全性的本质volatile关键字原理
violate关键字原理原创 2020-05-28 17:38:20 · 331 阅读 · 2 评论 -
对synchronized关键字的一点理解
线程安全性问题多线程技术的引用能够提升程序的处理性能,同时,也带来了很多麻烦,举个简单的例子多线程对于共享变量访问带来的安全性问题如下面的代码:public class SynchronizedTest extends Thread{ private static int count=0; public static void inc(){ try { Thread.sleep(1); } catch (InterruptedE原创 2020-05-21 16:52:35 · 158 阅读 · 0 评论 -
认识java线程
一、java中线程的创建1.继承Thread类2.实现Runable接口3.实现Callable/Future接口,带返回值二、线程的生命周期线程既然能被创建,势必也能被销毁,所以说线程是存在生命周期的,线程的生命周期分为6种状态:NEW: 初始状态,线程被构建,但是还没有调用 start 方法RUNNABLE: 运行状态,JAVA 线程把操作系统中的就绪和运行两种状态统一称为“运行状态”BLOCKED: 阻塞状态,表示线程竞争锁失败,被放到锁队列中的状态WAITING: 阻塞状态,表示线原创 2020-05-20 16:40:07 · 152 阅读 · 0 评论 -
线程出现的意义
一、线程的发展真空管和穿孔打卡-晶体管和批处理系统-集成电路和多道程序设计二、进程和线程的区别进程和线程区别摘自此文章进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位,简单理解为系统中正在运行的一个应用程序线程:是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位进程和线程的关系:(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。(3)原创 2020-05-17 15:49:40 · 991 阅读 · 0 评论