随笔分类 -  java并发

java并发
摘要:1.一把锁保护多个资源 受保护资源和锁的关系是N:1 2.保护没有关联关系的多个资源 银行业务中针对账户余额的取款操作 银行业务中针对账户密码的更改操作 为账户余额和密码修改分配不同的锁来解决并发问题 代码,两把锁ballLock,pwLock分别保护不同的资源 class Account { // 阅读全文
posted @ 2021-06-25 16:15 SpecialSpeculator 阅读(80) 评论(0) 推荐(0) 编辑
摘要:1.原子性 一个或多个操作在cpu执行的过程中不被中断的特性,称为原子性 2.如何解决原子性问题 源头是执行一半线程切换,禁止线程切换是不是就可以了? 操作系统的线程切换,是操作系统自己控制cpu进行的,所以禁止操作系统的cpu发生中断就可以禁止线程切换 单核cpu场景,同一时刻只有一个线程执行,禁 阅读全文
posted @ 2021-06-25 15:23 SpecialSpeculator 阅读(72) 评论(0) 推荐(0) 编辑
摘要:1.前情提要 可见性,原子性,有序性,称为并发编程的bug之源 2.java的内存模型 导致可见性问题是cpu缓存引起 导致有序性问题是编译器优化 那么解决方案是什么? 禁用缓存和禁用编译优化,但是程序性能就下降了 那么如何能保证性能的同时,又解决了可见性及有序性问题? 该禁用缓存和编译优化的时候禁 阅读全文
posted @ 2021-06-25 14:02 SpecialSpeculator 阅读(94) 评论(0) 推荐(0) 编辑
摘要:1.计算机硬件的速度差异 cpu 》 内存 》 磁盘 木桶理论,(水桶能装多少水,取决于最短的木板) 程序整体的性能取决于最慢的操作——读写 I/O 设备,也就是说单方面提高 CPU 性能是无效的。 计算机做了什么? 1.cpu增加了缓存,来均衡与内存的差异 2.操作系统增加了进程,线程,分时复用C 阅读全文
posted @ 2021-06-24 16:09 SpecialSpeculator 阅读(179) 评论(0) 推荐(0) 编辑
摘要:1.golang 语言层面支持并发的编程语言,支持并发是golang的非常重要特性 golang支持的是协程,可以类比java中的线程,解决并发问题的难点就是(线程之间的协作) 2.golang如何解决多协程之间的协作问题呢 (1)共享内存方式通信 golang也像java一样提供了管程和原子类对协 阅读全文
posted @ 2021-06-23 16:01 SpecialSpeculator 阅读(555) 评论(0) 推荐(0) 编辑
摘要:1.协程 轻量级线程 Coroutine 线程是内核态调度的,协程是用户态调度的,用户态调度的资源消耗更小,性能更高 内核态用户态之间切换有成本 线程的栈大小:1M 协程的栈大小:几K或者几十K 2.Golang中的协程示例 import ( "fmt" "time" ) func hello(ms 阅读全文
posted @ 2021-06-22 18:20 SpecialSpeculator 阅读(68) 评论(0) 推荐(0) 编辑
摘要:1.四种模型 同步阻塞,同步非阻塞,异步阻塞,异步非阻塞 2.同步异步之说 是线程之间调用的说法 调用者与被调用者,它们是线程之间的关系 两个线程要么是同步,要么是异步 同步操作:调用线程需要等待被调用线程返回结果,才会进行下一步 异步操作:调用线程不需要等待被调用线程返回结果,被调用线程一版依赖事 阅读全文
posted @ 2021-06-22 18:02 SpecialSpeculator 阅读(84) 评论(0) 推荐(0) 编辑
摘要:1.前情提要 面向对象编程理论中,对象之间通信,依赖的是消息,但java里,对象之间通信,用的是对象方法 2.Actor模型 计算模型,计算单位Actor,所有的计算都在Actor中执行 Actor中一切都是actor,actor之间完全隔离,不共享任何变量 不共享变量,就不会有并发问题 java本 阅读全文
posted @ 2021-06-21 14:04 SpecialSpeculator 阅读(238) 评论(0) 推荐(0) 编辑
摘要:1.高性能数据库连接池HiKarCP c3p0,DBCP,Tomcat JDBC Connection Pool,Druid 最火的是Hikaricp 最快的数据库连接池,springboot2.0作为默认数据库连接池 2.数据库连接池 池化资源,避免重量级资源的频繁创建和销毁。数据库连接池就是避免 阅读全文
posted @ 2021-06-19 14:18 SpecialSpeculator 阅读(261) 评论(0) 推荐(0) 编辑
摘要:1.为什么要用高性能队列Disruptor 为什么要说Disruptor?java SDK提供了2个有界队列 ArrayBlockQueue,LinkedBlockingQueue,基于ReentrantLock锁实现,在高并发情况下,锁的效率不高,更好的替代品有木有?Dosritpr 2.Disr 阅读全文
posted @ 2021-06-18 14:30 SpecialSpeculator 阅读(354) 评论(0) 推荐(0) 编辑
摘要:1.并发案例,限流Guava RateLimiter Guava RateLimiter 如何解决高并发的限流问题 guava中的工具类RateLimiter 2.简单实用RateLimiter 假设已有线程池,每秒只能处理两个任务,提交任务过快,可能导致系统不稳定,用到限流 创建一个2个请求/秒的 阅读全文
posted @ 2021-06-17 16:12 SpecialSpeculator 阅读(227) 评论(0) 推荐(0) 编辑
摘要:1.生产者-消费者模式 Worker Thread模式类比现实工厂里车间工人的工作模式 生产者-消费者模式,类比显示工厂里流水线模式 2.应用场景 Log4j2异步Appender内部使用生产者-消费者模式。 3.生产者,消费者模式优点 核心:任务队列 生产者线程生产任务,并将任务添加到任务队列中 阅读全文
posted @ 2021-06-16 11:20 SpecialSpeculator 阅读(148) 评论(0) 推荐(0) 编辑
摘要:1.两阶段终止模式 如何优雅的终止线程? 2.线程执行完或者出现异常就会进入终止状态 现在要思考的是,不是自己终止自己,而是在线程T1中终止线程T2 而且是优雅的终止,给T2线程一个料理后事的机会,而不是被一剑封喉 3.历史 java的Thread类提供了一个stop方法,用来终止线程,但早已不适用 阅读全文
posted @ 2021-06-15 15:28 SpecialSpeculator 阅读(155) 评论(0) 推荐(0) 编辑
摘要:1.WorkThread 设计模式 可以有效避免频繁创建,销毁以及OOM问题 2.类比现实 类比车间的工作模式 车间工人,有活大家一起干,没活就聊聊天 车间里工人的数量是确定的 3.编程世界映射车间的套路呢 如何实现Worker Thread模式 阻塞队列做任务池,创建固定数量的线程消费阻塞队列。 阅读全文
posted @ 2021-06-11 16:17 SpecialSpeculator 阅读(118) 评论(0) 推荐(0) 编辑
摘要:1.Thread-Pre-Message 设计模式 简单来说,就是为每个任务分配一个独立的线程,最简单的分工方法 2.并发领域3个核心问题 分工,同步,互斥 同步,互斥源自微观,分工来自宏观 Thread-Pre-Message其实就是一种分工模式 3.映射现实世界 教育小朋友搞不定,委托学校老师 阅读全文
posted @ 2021-06-10 20:53 SpecialSpeculator 阅读(95) 评论(0) 推荐(0) 编辑
摘要:1.Balking模式 线程安全的单例模式 2.多线程的if 多线程if条件快速放弃的方案 3.案例精选 编辑器自动保存功能 每隔一段时间自动执行存盘操作,前提是文件做过修改。如果文件没有做过操作,不要等待,快速放弃存盘。和上一篇的Guarder Suspension在这一点有很大的不同。Guard 阅读全文
posted @ 2021-06-10 17:26 SpecialSpeculator 阅读(74) 评论(0) 推荐(0) 编辑
摘要:1.Guarded Suspension设计模式 等待唤醒机制的规范实现 2.业务场景 用户发请求->异步消息->MQ->等MQ返回结果,结果返回浏览器 给mq发消息的线程是T1,但消费mq结果的线程不是T1,那么线程T1如何等待MQ的返回结果? 3.伪代码 class Message{ Strin 阅读全文
posted @ 2021-06-07 23:58 SpecialSpeculator 阅读(59) 评论(0) 推荐(0) 编辑
摘要:1.什么是Immutability Immutability,不变性, 叫做不变性设计模式,简单来说就是对象一旦创建,状态就不再发生变化。 变量一旦被赋值,就不允许修改了(没有写操作);没有修改操作,就保持了不变性 2.什么情况用Immutablity设计模式 多个线程同时读写同一个共享变量存在并发 阅读全文
posted @ 2021-06-01 17:22 SpecialSpeculator 阅读(114) 评论(0) 推荐(0) 编辑
摘要:AutomicBoolean 介绍 java并发包下提供的原子变量,是原子类其中之一。基本特性是在多线程环境下,多个线程同时执行这些类的实例包含的方法时,具有排他性 当某个线程进入方法,不会被其他线程打断,而其他线程就像自旋转一样,等待该方法执行完成 原子性操作 阅读全文
posted @ 2021-05-31 16:33 SpecialSpeculator 阅读(673) 评论(0) 推荐(0) 编辑
摘要:写锁和读锁成对出现,保证锁的是同一份资源 写锁正在写入的过程中,读锁获取不到,一直等待 写数据的时候,读实现不可读 适用于读多写少的场景 import sigma.resource.sync.model.DevopsData; import sigma.resource.sync.model.Jon 阅读全文
posted @ 2021-03-10 14:31 SpecialSpeculator 阅读(79) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示