多线程
文章平均质量分 86
march of Time
程序媛一枚
展开
-
disruptor框架无锁实现生产者消费者代码实例
它使用无锁的方式实现了一个环形队列,非常适合于实现生产者和消费者模式,比如事件和消息的发布。在Disruptor中,别出心裁地使用了环形队列(RingBuffer)来代替普通线性队列,这个环形队列内部实现为一个普通的数组。对于一般的队列,势必要提供队列同步head和尾部tail两个指针,用于出队和入队,这样无疑就增加了线程协作的复杂度。为了能够快速从一个序列(sequence)对应到数组的实际位置(每次有元素入队,序列就加1),Disruptor要求我们必须将数组的大小设置为2的整数次方。...原创 2022-07-21 11:49:37 · 320 阅读 · 0 评论 -
AQS组件之ReentrantLock源码分析
文章目录ReentrantLock介绍源码分析ReentrantLock的加锁方法ReentrantLock的conditionReentrantLock介绍我们知道ReentrantLock是juc包下的一个锁,它主要用lock方法来加锁,保证同步块同一时间只能有一个线程运行,但有比synchronized 更加丰富的功能,比如:公平和非公平(synchronized只有非公平锁),可中断响应(当获取到的锁被中断时会抛出中断异常,同时释放锁),超时等待(超过一定的时间未获得锁便不再等待)等Reent原创 2022-02-18 13:02:34 · 191 阅读 · 0 评论 -
java什么是monitor和Monitor监视器锁、对象布局
文章目录Monitor监视器锁什么是moniter对象布局Monitor监视器锁每个同步对象都有一个自己的Monitor(监视器锁),加锁过程如下图所示:任何一个对象都有一个Monitor与之关联,当且一个Monitor被持有后,它将处于锁定状态。Synchronized在JVM里的实现都是基于进入和退出Monitor对象来实现方法同步和代码块同步,虽然具体实现细节不一样,但是都可以通过成对的MonitorEnter和MonitorExit指令来实现。monitorenter:每个对象都是一个监原创 2022-02-17 04:14:43 · 6158 阅读 · 4 评论 -
使用nio多线程下载网络文件实例
代码:import io.github.viscent.mtia.util.Debug;import io.github.viscent.mtia.util.Tools;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;imp原创 2021-12-21 02:07:55 · 805 阅读 · 0 评论 -
Java多线程环境检测系统中是否存在死锁和死锁恢复代码示例
文章目录ManagementFactory介绍死锁检测与恢复介绍代码公共资源类导致死锁的模型模型实现类模拟死锁的程序类ManagementFactory介绍关于ManagementFactory:ManagementFactory是一个可以获取JVM线程、内存、编译等信息的一个工厂类 OperatingSystemMXBean system = ManagementFactory.getOperatingSystemMXBean(); //相当于System.getProper原创 2021-12-13 17:19:03 · 680 阅读 · 0 评论 -
【学习笔记】juc并发学习+关于锁的面试题
文章目录Synchronized 其 原 理 是 什 么 ?你 刚 才 提 到 获 取 对 象 的 锁 ,这 个“ 锁 ”到 底 是 什 么 ? 如 何 确 定 对象的锁什 么 是 可 重 入 性 , 为 什 么 说 Synchronized 是 可 重 入 锁 ?为 什 么 说 Synchronized 是 一 个 悲 观 锁 ? 乐 观 锁 的 实 现 原 理 又 是 什 么 ? 什 么 是 CAS, 它 有 什 么 特 性 ?乐 观 锁 一 定 就 是 好 的 吗 ?跟 Synchronized 相原创 2021-07-09 00:03:06 · 212 阅读 · 1 评论 -
【多线程学习笔记】sychronized关键字底层原理、sychronized与ReentrantLock、volatile和synchronized
文章目录sychronized释义synchronized关键字最主要的三种使用方式:synchronized底层原理:同步代码块:同步方法当前类的class对象作为锁Synchronized与Reentrantlock的区别关于可重入锁 可中断锁 公平锁和非公平锁的概念ReentrantLock是如何实现可重入性的?sychronized释义synchronized关键字解决的是【多个线程之间访问资源的同步性】,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行原创 2021-09-23 13:22:04 · 443 阅读 · 0 评论 -
【多线程学习笔记】乐观锁 悲观锁 自旋锁 递归锁 独占锁 偏向锁 轻量级锁
文章目录乐观锁悲观锁两种锁的使用场景自旋锁一个简单自旋锁:版本号举例递归锁独占锁共享锁轻量级锁偏向锁## 什么是CAS乐观锁乐观锁:就像它的名字一样,对于并发间操作产生的线程安全问题持乐观状态,乐观锁认为竞争不总是会发生,因此它不需要持有锁,将比较-替换这两个动作作为一个原子操作尝试去修改内存中的变量,如果失败则表示发生冲突,那么就应该有相应的重试逻辑。乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人原创 2021-09-26 12:18:17 · 681 阅读 · 0 评论 -
【异步编程学习笔记】JDK中的FutureTask和CompletableFuture详解(使用示例、源码)
FutureTask概述FutureTask代表了一个可被取消的异步计算任务,该类实现了Future接口,比如提供了启动和取消任务、查询任务是否完成、获取计算结果的接口。 FutureTask任务的结果只有当任务完成后才能获取,并且只能通过get系列方法获取,当结果还没出来时,线程调用get系列方法会被阻塞。另外,一旦任务被执行完成,任务将不能重启,除非运行时使用了runAndReset方法。FutureTask中的任务可以是Callable类型,也可以是Runnable类型(因为FutureTask实现原创 2021-09-28 09:46:05 · 1171 阅读 · 0 评论 -
【多线程学习笔记】单例模式- 延迟加载/懒汉模式的解决方案:DCL双重检测锁 + 单例模式的其他实现方案
文章目录立即加载/“饿汉模式”延迟加载/“懒汉模式”延迟加载/“懒汉模式”的解决方案(1)声明synchronized关键字(2)尝试同步代码块(3)针对某些重要的代码进行单独的同步(4)使用DCL双检查锁机制使用静态内置类实现单例模式序列化与反序列化的单例模式实现使用static代码块实现单例模式立即加载/“饿汉模式”什么是立即加载?立即加载就是使用类的时候已经将对象创建完毕,常见的实现办法就是直接new实例化。而立即加载从中文的语境来看,有“着急”、“急迫”的含义,所以也称为“饿汉模式”。 立即加原创 2021-10-18 01:42:22 · 521 阅读 · 0 评论 -
【多线程编程学习】java多线程基于数据分割的大文件下载器
代码来自书籍《java多线程编程实战指南》代码1:下载网络图片public class FileDownloaderApp { public static void main(String[] args) throws InterruptedException { String[]pics =new String[]{"https://img.redocn.com/sheji/20200219/jinzhikanfagongyihaibao_10824681.jpg.400.jpg",原创 2021-11-06 20:48:08 · 283 阅读 · 0 评论 -
自定义线程池内置线程池的使用 ThreadPoolExecutor和Executorservice 示例与注意事项
文章目录线程池介绍自己设计一个线程池1.设计ThreadPool类:2.设计工作队列3.实现自己设计的线程池用java的ThreadPoolExecutor自定义线程池自定义线程池-参数设计分析自定义线程池-实现步骤内置线程池ExecutorServiceScheduledexecutorservice线程池介绍自JDK1.5起,utils包提供了ExecutorService线程池的实现,主要目的是为了重复利用线程,提高系统效率。我们知道Thread是一个重量级的资源,创建、启动以及销毁都是比较耗费系原创 2021-12-10 12:48:11 · 1587 阅读 · 0 评论