
Multi-thread && IO
文章平均质量分 70
io的使用;多线程、线程池、乐观锁等问题
BigBug_500
Talk is cheap.Show me the code.
EmailMeAt:snail.pu@foxmail.com
展开
-
ThreadLocal底层实现与实际应用
在 Java 中内存泄漏是指,GC 不能释放掉已经没有在使用的某一对象的内存空间。原创 2019-12-31 17:29:42 · 1714 阅读 · 2 评论 -
多线程系列:二、线程池在 Spring 中的使用与关闭
在 上一篇 中,我们了解了进程、线程、Java 线程池的一些基础概率,然后抛出了线程池在 Spring 中的使用与关闭两个问题,本篇将通过案例对这两个问题进行探讨。ThreadPool 在 Spring 中的使用1. 使用 JUC 下面的 ThreadPoolExecutor Bean 默认为单例类型,所以只需要在 Spring IOC容器加载时,添加一个 Bean 即可 @Bean public ExecutorService IOThreadPool() { i原创 2020-11-22 23:12:35 · 2502 阅读 · 2 评论 -
锁系列:一、悲观 / 乐观锁原理与运用
悲观锁 / 乐观锁比较:乐观锁的实现方式:CAS(Compare and Swap)思想:需要读写的内存位置V,进行比较的预期值A,要写入的新值B。当且仅当预期值A和内存值V相同时,才允许将内存值V修改为B,并提交更新,否则该线程一直自旋,直到更新成功。Q:CAS包含了Compare和Swap两个操作,它又如何保证原子性呢?A:CAS是由CPU支持的原子操作,其原子性是在硬件层面进...原创 2020-01-21 11:40:54 · 1641 阅读 · 1 评论 -
多线程系列:一、进程与线程、Java中的线程池
四种类型的线程池Executors.newFixedThreadPool(int nThreads):public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, ...原创 2020-01-21 11:28:41 · 1376 阅读 · 0 评论 -
Java Memory Model
简单来说就是系统在执行代码的时候并不一定是按照你写的代码的顺序依次执行。原创 2023-04-30 11:57:45 · 1269 阅读 · 0 评论 -
多线程系列:附、基于生产者消费者多线程模式的分组排序取top
场景: 生产者消费者都分别使用多线程,生产者多个线程不断产生以下分学课数据,由消费者多个线程处理数据,并输出处理每条数据时的当前科目的平均分、top3的学生名和分数。//张1 数学 50//张1 语文 70//张1 英语 60//张2 数学 20//张2 语文 40//张2 英语 20//张3 数学 50//张3 语文 60//张3 英语 55//张4 数学 22//张4 语文 11//张4 英语 70//张4 **科 74//张5 **科原创 2021-09-01 19:29:14 · 319 阅读 · 0 评论 -
不同多线程创建方式下,售票的安全用例
线程及线程池参考:https://blog.youkuaiyun.com/BigBug_500/article/details/90294569实现Runnable接口创建多线程,synchronized保证数据同步: @Test public void runnableSale() { int threadNum = 4; //@Test不同于mai...原创 2019-05-31 21:38:07 · 787 阅读 · 0 评论 -
多线程系列:附、LinkedBlockingQueue 引发的一次线上事故
总结: 空闲线程从 BlockingQueue 中获取任务时,是通过信号量的方式,每次唤醒一个线程去取任务,所以,当向线程池提交任务过快,每次唤醒一个线程去执行任务处理不过来时,便会执行任务拒绝策略。业务场景: 对账进程需要下载 某一时间段 的 n个账号 的第三方账单,第三方账单中数据量大,需要控速入库,入库完一组数据,再去下载第二组账单。线程池配置:@Beanpublic ThreadPoolTaskExecutor cpuThreadPool() { ThreadPoolTa原创 2021-03-22 20:47:57 · 2531 阅读 · 0 评论 -
Netty 中的 ByteBuf
所有的缓冲区,都是为了平衡了 数据产生方 和 数据消费方 的处理效率差异。零拷贝为什么需要零拷贝? 应用程序从磁盘或网卡上获取数据时,为了合规的在不同的缓冲区域操作数据,需要来回拷贝数据,在拷贝的过程中,会消耗一部分时间,还可能会占用 CPU ,进而影响系统的处理效率。为了提高应用的吞吐量,我们应该尽量避免数据拷贝的过程出现。 使用零拷贝方式,不仅仅带来更少的数据复制,还能带来其他的性能优势,例如更少的上下文切换,更少的 CPU 缓存伪共享以及无 CPU 校验和计算。网络数据拷贝流程的演变:原创 2020-10-08 22:58:29 · 1055 阅读 · 0 评论 -
Netty 线程模型、核心组件
BIO、NIO、AIO与Linnux下的IO模型 概览Netty 基础概念 Netty 是一个 异步、基于事件驱动 的网络应用框架,用作快速开发高性能、高可用性的网络 I/O 应用。它的出现,是为了解决源生 NIO 的问题,如:NIO 使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。需要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,必须对多线程和网络编程非常熟悉,才能编写出高质量的原创 2020-07-16 21:12:17 · 1662 阅读 · 0 评论 -
BIO、NIO、AIO与Linnux下的IO模型 概览
IO是什么:IO是将数据从源头通过流的方式,输出到目的地。BIO(Blocking IO):同步阻塞IO模型原创 2019-11-04 09:18:29 · 851 阅读 · 0 评论 -
Blocking IO / Non-blocking IO 操作文件
BufferedReader(字符读入处理流)读取文件中的内容private StringBuilder getFileContent(MultipartFile oneFile) {//MultipartFile是spring文件上传的工具类 StringBuilder fileContent = new StringBuilder(""); //try-wit...原创 2019-12-08 17:21:09 · 767 阅读 · 0 评论 -
锁系列:二、Lock 接口下的锁
什么是AQS AQS是一个用来构建锁和同步器的框架,比如 ReentrantLock,FutureTask 都是基于 AQS 来实现的原创 2020-02-02 13:04:14 · 842 阅读 · 0 评论