
多线程
文章平均质量分 91
Harmony_Launch
这个作者很懒,什么都没留下…
展开
-
【计算机学习笔记(一百三十四)】之Executor框架和线上问题定位
文章目录本文章由公号【开发小鸽】发布!欢迎关注!!!一. Executor框架(一) 概述(二) Executor框架结构1. 两级调度模型2. Executor结构和成员(1) 任务(2) 任务的执行(3) 异步计算的结果3. Executor执行过程(三) ThreadPoolExecutor详解1. 概述2. FixedThreadPool3. SingleThreadExecutor详解4. CachedThreadPool详解(四) FutureTask详解1. FutureTask概述2. Fu原创 2021-05-16 21:19:04 · 151 阅读 · 0 评论 -
【Java学习笔记(一百三十三)】之 Java并发工具类与线程池
文章目录本文章由公号【开发小鸽】发布!欢迎关注!!!一. Java中的并发工具类(一) 概述(二) CountDownLatch(三) 同步屏障CyclicBarrier(四) 信号量Semaphore(五) 数据交换Exchanger二. 线程池技术(一) 线程池处理流程(二) 工作线程(三) 线程池的使用1. 创建线程池(1) corePoolSIze(2) maximumPoolSIze(3) KeepAliveTime(4) TimeUnit(5) ThreadFactory(6) runnable原创 2021-05-16 19:50:05 · 278 阅读 · 0 评论 -
【Java学习笔记(一百三十二)】之Java并发容器,Fork/Join框架,原子操作类
文章目录本文章由公号【开发小鸽】发布!欢迎关注!!!一. Java并发容器(一) ConcurrentHashMap1. 为什么使用ConcurrentHashMap2. ConcurrentHashMap的结构3. ConcurrentHashMap的初始化(1) 初始化segment数组(2) 初始化每个segment4. 定位segment5. concurrentHashMap的操作(1) get操作(2) put操作(3) size操作(二) ConcurrentLinkedQueue1. con原创 2021-05-15 23:20:48 · 247 阅读 · 1 评论 -
【Java学习笔记(一百三十一)】之 Java中的锁的详细介绍
文章目录本文章由公号【开发小鸽】发布!欢迎关注!!!一. Lock接口(一) 概述(二) 基本使用二. 队列同步器(一) 概述(二) AQS1. 概述2. 重写方法3. 模板方法(三) AQS的实现分析1. 概述2. 同步队列3. 独占式同步状态获取与释放4. 共享式同步状态获取与释放三. 重入锁(一) 概述(二) 实现重进入(三) 公平锁实现四. 读写锁(一) 概述(二) 接口与实现1. ReadWriteLock2. ReentrantReadWriteLock(三) 实现分析1. 读写状态设计2. 写原创 2021-03-18 21:30:47 · 256 阅读 · 0 评论 -
【Java学习笔记(一百三十)】之启动,终止线程,线程间通信
文章目录本文章由公号【开发小鸽】发布!欢迎关注!!!一. 线程简介(一) 概述(二) 线程优先级(三) 线程状态(四) Daemon线程二. 启动和终止线程(一) 构造线程(二) 启动线程(三) 中断(四) 过期的suspend(),resume(),stop()三. 线程间通信(一) volatile和synchronized(二) 等待/通知机制(三) 等待/通知经典范式(四) Thread.join()(五) ThreadLocal本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:原创 2021-03-17 20:56:12 · 252 阅读 · 0 评论 -
【Java学习笔记(一百二十九)】之 final域重排序规则,JMM内存可见性保证
文章目录本文章由公号【开发小鸽】发布!欢迎关注!!!一. final域(一) 重排序规则(二) 写final域的重排序规则(三) 读final域的重排序规则(四) final引用不能逸出构造函数(五) JSR-133增强final语义的意义二. happens-before三. JMM的内存可见性保证(一) 单线程程序(二) 正确同步的多线程程序(三) 未正确同步的多线程程序本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. final域(一) 重排序规则 &n原创 2021-03-16 19:07:45 · 485 阅读 · 1 评论 -
【Java学习笔记(一百二十七)】之JMM,重排序,内存屏障,顺序一致性,concurrent包
文章目录本文章由公号【开发小鸽】发布!欢迎关注!!!一. Java内存模型问题(一) 线程通信(二) Java内存模型结构(三) 重排序问题(四) 缓冲区与内存屏障1. LoadLoad2. StoreStore3. LoadStore4. StoreLoad(五) happens-before二. 重排序(一) 概述(二) 数据依赖性三. 顺序一致性(一) 概述(二) 数据竞争(三) 顺序一致性内存模型(四) 64位变量操作本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. J原创 2021-03-13 19:40:30 · 259 阅读 · 0 评论 -
【Java学习笔记(一百二十五)】之 volatile, synchronized, cas底层原理
文章目录本文章由公号【开发小鸽】发布!欢迎关注!!!一. Java并发的底层原理(一) 概述(二) volatile1. 概述2. CPU术语3. volatile原理4. volatile的使用优化(三) synchronized1. 概述2. 对象锁3. 锁的升级4. 偏向锁(1) 偏向锁的获取(2) 偏向锁的撤销(3) 关闭偏向锁5. 轻量级锁(1) 加锁(2) 解锁(四) 原子操作的实现1. CAS2. 处理器实现原子操作(1) 总线锁定(2) 缓存锁定3. Java中的原子操作4. CAS实现原子原创 2021-03-11 20:21:56 · 288 阅读 · 0 评论 -
【Java学习笔记(一百二十四)】之 并发编程的主要问题
文章目录本文章由公号【开发小鸽】发布!欢迎关注!!!一. 并发编程的主要问题(一) 概述(二) 上下文切换1. 概述2. 减少上下文切换(1) 无锁并发(2) CAS(3) 使用最少线程(4) 协程3. jstack使用(三) 死锁(四) 资源限制问题1. 硬件资源限制2. 软件资源限制本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 并发编程的主要问题(一) 概述 并发编程的目的是让程序运行地更快,通过多线程执行原创 2021-03-11 18:57:58 · 132 阅读 · 0 评论 -
【Java学习笔记(一百零一)】之JUC线程池详细介绍
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. JUC线程池(一) 优势降低资源消耗,通过重用已创建的线程来降低线程创建和销毁的性能损失;提高响应速度,任务无需创建线程,直接执行;提高线程的可管理性,统一管理,分配,调优和监控。(二) 线程池状态 AtomicInteger类型的变量ctl中定义了线程池中的任务数量和线程池的状态两个信息,共32位,其中高3位表示线程池状态,低29位表示线程原创 2021-01-06 23:19:42 · 250 阅读 · 0 评论 -
【Java学习笔记(九十九)】之JUC阻塞和非阻塞队列详细介绍
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. JUC队列 单线程编程时我们会使用到一些集合类,如ArrayList等。ArrayList不是线程安全的,Vector通过加snychronized锁的方式实现线程安全,但是效率很低,同时Collections.synchronizedList(List list)方法也能够将ArrayList转换为线程安全的。这些方法都很低效,都是串行执行的。下面介绍阻塞队列与非阻塞原创 2021-01-06 23:18:19 · 404 阅读 · 0 评论 -
【Java学习笔记(九十八)】之ConcurrentHashMap,ConcurrentSkipListMap介绍
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. ConcurrentHashMap(一) 概述 HashMap是线程不安全的,put操作可能会产生死循环,在JDK1.8中更换了数据插入的顺序,解决了这个问题。但是线程安全问题依然未解决,因此Hashtable和Collections.synchronizedMap(hashmap)两种解决方案被提出,这两种方案都是通过对读写加锁,独占式地解决线程安全问题,吞吐量很低,原创 2021-01-05 11:21:30 · 602 阅读 · 0 评论 -
【Java学习笔记(九十六)】之CyclicBarrier, CountDownLatch, Semaphore
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. CyclicBarrier(一) 概述 同步屏障,在JDK1.5引入的一个同步辅助类,它好比一扇门,堵住了线程执行的道路,直到所有线程就位,门才会打开,让所有线程一起通过。(二) 实现 CyclicBarrier的内部是使用重入锁ReentrantLock和条件Condition实现的。首先,CyclicB原创 2021-01-04 17:12:52 · 178 阅读 · 0 评论 -
【Java学习笔记(九十三)】之atomic包,AQS,锁,读写锁,Condition
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. atomic包(一) 概述 JUC中有一个包java.util.concurrent.atomic中存放着原子操作的类,如AtomicInteger,大致保证阔基本类型,引用类型,数组类型,对象的属性修改器类型,JDK1.8新增类。(二) 基本类型 使用原子的方式更新基本类型,如AtomicInteger,原创 2021-01-02 15:49:29 · 431 阅读 · 0 评论 -
【Java学习笔记(九十二)】之JUC的CAS,native关键词
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. J.U.C(一) 概述 J.U.C是java.util.concurrent,是JSR 166标准规范的一个实现,该框架在JDK1.5引入,包含以下内容: 1. AbstractQueuedSynchronizer(AQS框架), J.U.C中实现锁和同步机制的基础; &nb原创 2021-01-01 16:46:54 · 346 阅读 · 0 评论 -
【Java学习笔记(九十一)】之 volatile关键字
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. Volatile关键字(一) 定义 Java允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排它锁单独获得这个变量。即只要变量被volatile修饰了,则Java可以确保所有线程看到这个变量的值都是一致的,某个线程对该变量进行更新时,则其他线程也能看到最新的,这就是内存可见性。(二) volatile实现内存可见性的过程原创 2020-12-31 17:10:30 · 119 阅读 · 0 评论 -
【Java学习笔记(八十九)】 之 线程的停止,优先级,三个特性,内存可见性,同步锁优化
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 线程的停止(一) 设置退出标志,正常退出 设置一个退出的标志变量,来控制线程的退出。如使用boolean类型的变量,通过设置该变量为true或者false来控制while循环是否退出。(二) interrupt()中断线程 使用interrupt()方法中断线程有两种情况:1. 线程处于阻塞状态&nb原创 2020-12-31 12:40:54 · 255 阅读 · 0 评论 -
【Java学习笔记(八十五)】之 多线程的创建与6种线程状态
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 多线程的简介(一) 概述 多线程能够充分利用CPU的空闲时间片,提升进程的整体运行效率。同一进程的所有线程时共享同一内存的,不需要特殊的数据传送机制,不需要建立共享存储区或者共享文件。(二) 进程与线程1. 进程 每个应用程序可以运行更多个进程,每个进程都有一个独立的内存空间,进程是程序的基本单位。2原创 2020-12-30 10:50:50 · 182 阅读 · 0 评论 -
【Java学习笔记(八十四)】 之 Timer定时器,TimerTask任务
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. Timer定时器(一) 概述 JDK库中,Timer类负责计划任务,即确定在指定的时间开始执行某一个任务,而任务代码需要封装在TimeTask类的子类中。(二) Timer类的方法1. schedule(TimeTask task, Date time) 在指定的日期执行一次任务,当指定的日期早于当前的时原创 2020-12-22 22:39:59 · 493 阅读 · 0 评论 -
【Java学习笔记(八十三)】之 ReentrantLock类,Condition类,ReentrantReadWriteLock类
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. Lock的使用(一) ReentrantLock类 之前我们使用了synchronized关键字实现线程之间的同步互斥,在JDK1.5中添加了ReentrantLock类也能够达到同样的效果,并且扩展了新的功能。1. lock() 与 unlock() 创建一个新的ReentrantLock锁对象,调用该锁原创 2020-12-21 21:32:22 · 333 阅读 · 0 评论 -
【Java学习笔记(八十二)】之 多线程 join方法和ThreadLocal类
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. join()方法(一) 概述 当主线程创建并启动子线程时,如果子线程耗时比较长,导致主线程在子线程之前结束了。如果我们想让主线程在子线程之后结束,就需要使用join()方法了,它的作用是等待线程对象销毁。如在主线程a中调用子线程b的start()方法,同时调用了b的join()方法,那么线程a就会进入无限期的阻塞中,等待线程b执行完毕并销毁后才能继续执行线程a。(原创 2020-12-19 22:35:47 · 127 阅读 · 1 评论 -
【Java学习笔记(八十一)】之 多线程 等待/通知 机制
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 等待/通知机制 等待/通知机制能够实现线程间的通信,当线程间进行通信后,系统之间的交互性更强,提高了CPU的利用率。(一) 等待/通知机制的实现 wait()和notify()都是Object类的方法,Java为每个Object都实现了这两个方法。1. wait() &原创 2020-12-18 22:13:25 · 649 阅读 · 1 评论 -
【Java学习笔记(八十)】之 volatile关键字
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. Volatile关键字(一) volatile的作用 volatile关键字的作用是强制从公共堆栈中取得变量的值,而不是从线程私有堆栈中取得变量的值。当一个线程中新建一个变量时,该值在该线程的私有堆栈中存在,也在公共堆栈中存在。volatile关键字的作用就是同步这两个堆栈中的值,保证值会不断刷新。 当JVM设原创 2020-12-17 19:34:32 · 226 阅读 · 0 评论 -
【Java学习笔记(七十七)】之 synchronized同步方法,同步代码块
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. synchronized同步方法(一) 非线程安全 非线程安全问题会在多个线程对同一个对象中的实例变量进行并发访问时发生,结果就是获取到已经被修改过的数据,即“脏读”。(二) 方法内的变量是线程安全的 非线程安全问题针对的是实例变量被并发访问的情况,而存在于方法内部的私有变量是不会被其他方法访问到的,因此不原创 2020-12-16 22:32:19 · 1376 阅读 · 0 评论 -
【Java学习笔记(七十五)】之 暂停线程,划分优先级,守护线程
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 暂停线程(一) 使用方法 可以使用suspend()方法来暂停线程,使用resume()方法来恢复线程MyThread thread = new MyThread();thread.start();thread.suspend();Thread.sleep(1000);thread.resume();(二) 缺点分析 &n原创 2020-11-26 08:49:12 · 143 阅读 · 0 评论 -
【Java学习笔记(七十三)】之线程,多线程,停止线程
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 线程初见(一) 概述 进程是受操作系统管理的基本运行单元,线程是 进程中独立运行的子任务。使用多线程技术,可以在同一时间内运行更多不同种类的任务。一个进程运行时至少会有一个线程在运行,如main方法的线程至少有一个main线程在运行。(二) 实现多线程的方式 实现多线程有两种方式,一种是继承Thread类,原创 2020-11-23 22:29:57 · 193 阅读 · 0 评论