Skip to main content

moregeek program

【深入分析java线程池的实现原理】_13136445的博客-多极客编程

前言线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,合理的使用线程池对线程进行统一分配、调优和监控,有以下好处: 1、降低资源消耗; 2、提高响应速度; 3、提高线程的可管理性。Java1.5中引入的Executor框架把任务的提交和执行进行解耦,只需要定义好任务,然后提交给线程池,而不用关心该任务是如何执行、被哪个线程执行,以及什么时候执行。demo1、​​Exec

Read More

java 几分钟处理完 30 亿个数据?_码农小宋的博客-多极客编程

1. 场景说明现有一个 10G 文件的数据,里面包含了 18-70 之间的整数,分别表示 18-70 岁的人群数量统计。假设年龄范围分布均匀,分别表示系统中所有用户的年龄数,找出重复次数最多的那个数,现有一台内存为 4G、2 核 CPU 的电脑,请写一个算法实现。23,31,42,19,60,30,36,........2. 模拟数据Java 中一个整数占 4 个字节,模拟 10G 为 30 亿左

Read More

调度线程池scheduledthreadpoolexecutor源码解析_wx630f055ce23fc的博客-多极客编程

实现机制分析我们先思考下,如果让大家去实现​​ScheduledThreadPoolExecutor​​可以周期性执行任务的功能,需要考虑哪些方面呢?​​ScheduledThreadPoolExecutor​​的整体实现思路是什么呢?答: 我们是不是可以继承线程池类,按照线程池的思路,将任务先丢到阻塞队列中,等到时间到了,工作线程就从阻塞队列获取任务执行。如何实现等到了未来的时间点就开始执行呢?

Read More

学习线程池原理从手写一个线程池开始_wx630f055ce23fc的博客-多极客编程

概述线程池技术想必大家都不陌生把,相信在平时的工作中没有少用,而且这也是面试频率非常高的一个知识点,那么大家知道它的实现原理和细节吗?如果直接去看jdk源码的话,可能有一定的难度,那么我们可以先通过手写一个简单的线程池框架,去掌握线程池的基本原理后,再去看jdk的线程池源码就会相对容易,而且不容易忘记。线程池框架设计我们都知道,线程资源的创建和销毁并不是没有代价的,甚至开销是非常高的。同时,线程也

Read More

java并发编程学习7-阻塞队列_huazie的小屋的博客-多极客编程

阻塞队列 介绍阻塞队列之前,先来介绍下队列 Queue。Queue 用来临时保存一组等待处理的元素。它提供了几种非阻塞队列实现,如下: ConcurrentLinkedQueue,这是一个传统的先进先出队列。 PriorityQueue,这是一个(非并发的)优先队列。 如上两个队列的操作不会阻塞,如果队列为空,那么获取元素的操作将返回空值。 阻塞队列 BlockingQueue 扩展了 Qu

Read More

thread专题(4) - 构建块_生而为人的博客-多极客编程

此文被笔者收录在系列文章 ​​​架构师必备(系列)​​ 中,在实践中,委托是创建线程安全类最有效的策略之一:用已有的线程安全类来管理所有状态即可。一、同步容器-串行同步容器包括Vector和Hashtable、以及Collections.synchronziedXXX工厂方法创建的容器类,这些类通过封装它们的状态,并对每一个公共方法进行同步而实现了线程安全。这种封装对于单线程程序是线程安全的,对于

Read More

聊聊 threadpoolexecutor 线程池及其源码_wx630f055ce23fc的博客-多极客编程

什么是线程池在我们的实际开发中,通常使用线程池创建线程资源。而线程池本质上是一种池化技术,利用资源复用的思想,复用线程资源。为什么使用线程池那么,我们为什么要使用线程池呢?主要有以下两点原因:首先,使用线程池可以避免频繁创建和销毁线程所带来的性能开销。因为线程的创建会涉及到​​CPU​​ 上下文的切换以及内存的分配。其次,我们可以通过线程池参数控制线程的数量,避免无休止的创建线程带来的资源利用率过

Read More

java 中悲观锁的底层实现机制_wx630f055ce23fc的博客-多极客编程

介绍 AQSAQS(AbstractQueuedSynchronizer)是 Java 并发包中,实现各种同步组件的基础。比如各种锁:ReentrantLock、ReadWriteLock、StampedLock各种线程同步工具类:CountDownLatch、CyclicBarrier、Semaphore线程池中的 WorkerLock 接口的实现基本都是通过聚合了一个 AQS 的子类来完成线程

Read More

源码角度了解阻塞队列之synchronousqueue_周杰伦本人的博客-多极客编程

源码角度了解阻塞队列之SynchronousQueue SynchronousQueue是一个同步队列,它没有任何的容量,插入操作都必须等待另一个线程的相应删除操作 从它的构造方法中我们可以看到,可以指定是否为公平的队列,如果是公平的使用队列,如果不是公平的,使用栈来存储 put()方法 public void put(E e) throws InterruptedException {

Read More

源码角度了解阻塞队列之delayqueue_周杰伦本人的博客-多极客编程

源码角度了解阻塞队列之DelayQueue DelayQueue是延迟队列,在延迟到期的时候才能被获取到,按照到期时间从小到大以二叉堆的形式排列,时间最短的在堆顶的位置,它的成员遍历包括一个Condition条件,一个PriorityQueue队列,一个锁,只允许一个线程生产或消费,还有一个记录leader的线程对象。 put()方法 它的put()方法同样也是直接调用了offer()方法,我们看

Read More

【优惠卷秒杀系统设计】秒杀优化 —— 基于阻塞队实现异步秒杀优化 及 基于lua脚本判断秒杀库存、一人一单_perceus.的博客-多极客编程

(目录) 秒杀优化 1、秒杀优化-异步秒杀思路 回顾一下下单流程: 当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作 分成如下几个步骤: 1、查询优惠卷 2、判断秒杀库存是否足够 3、查询订单 4、校验是否是一人一单 5、扣减库存 6、创建订单 在这六步操作中,又有很多操作是要去操作数据库的,而且还是一个线程串行执行, 这样就

Read More

源码角度了解阻塞队列之arrayblockingqueue_周杰伦本人的博客-多极客编程

源码角度了解阻塞队列之ArrayBlockingQueue 关于阻塞队列的文章,之前的文章也有所介绍,今天从源码的角度再分析分析,接口是BlockingQueue,它的实现类很多, ArrayBlockingQueue数组实现的环形队列,它定义了队头指针的队尾指针,一个ReentrantLock锁和两个Condition put()方法 它的put方法: public void put(E e)

Read More

源码角度了解阻塞队列之linkedblockingqueue_周杰伦本人的博客-多极客编程

源码角度了解阻塞队列之LinkedBlockingQueue 大家好 我是周杰伦本人 欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏 LinkedBlockingQueue是单向链表的阻塞队列,通过它的构造方法可以知道如果不指定容量的话,这个队列的长度Integer类型的最大值,它有两个锁和两个Condition,notEmpty = takeLock.newCondition();这是正在等待获取

Read More

关于线程池,你需要了解这些_浅羽技术的博客-多极客编程

线程池参数 1、 降低资源消耗;提高线程利用率,降低创建和销毁线程的消耗。 2、 提高响应速度;任务来了,直接有线程可用可执行,而不是先创建线程,再执行。 3、 提高线程的可管理性;线程是稀缺资源,使用线程池可以统一分配调优监控。 corePoolSize 代表核心线程数,也就是正常情况下创建工作的线程数,这些线程创建后并不会消除,而是一种常驻线程 maxinumPoolSize 代表的是

Read More

这些并发容器的坑,你要谨记!_华为云开发者社区的博客-多极客编程

摘要:JDK1.5及之后的版本中,提供的线程安全的容器,一般被称为并发容器。与同步容器一样,并发容器在总体上也可以分为四大类,分别为:List、Set、Map和Queue。本文分享自华为云社区《​​【高并发】要想学好并发编程,这些并发容器的坑是你必须要注意的!!(建议收藏)​​》,作者:冰 河 。其实,在JDK1.5之前的线程安全的容器,大多数都是指同步容器,使用同步容器进行并发编程时,最大的问题

Read More

【多线程】模拟阻塞队列,实现生产者消费者模型_perceus的博客-多极客编程

@TOC 生产者消费者模型 什么是阻塞队列 阻塞队列 与 普通队列 的特性一样的:先进先出。但是呢,相比于普通队列,阻塞队列也有着一些其它方面的功能!!!  线程安全  产生阻塞效果   2.1 如果队列为空,尝试出队一个元素,就会触发阻塞,一直阻塞到队列不为空为止。   2.2 如果队列为满,尝试入队一个元素,就会触发阻塞,一直阻塞到队列不为满为止。 基于上述特性,就可以实现“生产者消费者

Read More

分享一个JDK批量异步任务工具CompletionService,超好用-多极客编程

摘要:当需要批量提交异步任务,推荐CompletionService。CompletionService将线程池Executor和阻塞队列融合,让批量异步任务管理更简单。本文分享自华为云社区《​​JDK批量异步任务最强工具CompletionService​​》,作者: JavaEdge。如何优化一个查询各个价格接口的代码?若使用“ThreadPoolExecutor+Future”,可能优化如下

Read More

线程池中的阻塞队列有哪几种?-多极客编程

线程池中的阻塞队列有哪几种? 阻塞队列用于保存等待执行的任务。当任务的数量超过 corePoolSize 数量,后续的任务将会进入阻塞队列,阻塞排队。 有以下几种阻塞队列: ArrayBlockingQueue 是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。 ArrayBlockingQueue是一个用数组实现的有界阻塞队列。 队列慢时插入操作被阻塞,队列空

Read More