
多线程高并发
文章平均质量分 90
西红柿系番茄
知其然,知其所以然。
展开
-
总结一下线程池
一、线程池的优点和处理流程1、优点降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。2、处理流程二、扩展知识1、corePoolSize和maximumPoolSize可以在创建之后使用setCorePoolSize()、setMaximumPoolSize(原创 2021-02-09 16:45:21 · 452 阅读 · 0 评论 -
实现优先级队列的线程池
回顾一下线程池的优点和原理优点降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。原理在实际的开发中,会将各种不同的异步任务提交到线程池执行,它们有轻重缓急。如果任务量少,一来就有空闲线程处理,哦那没事了。如果任务量多,我们希望任务队列根据任务的优先级有序存原创 2021-02-08 16:28:21 · 3874 阅读 · 1 评论 -
如何搭建高性能、高可用、可伸缩、可扩展的网站
本文只是对所读书籍做一些总结,不代表博主的实战经验,#_#一、高性能也叫高并发,主要指标有响应时间、并发数、吞吐量等。1、Web前端方面浏览器:缓存、压缩、合并请求、减少Cookie传输、延迟加载JSCDN、反向代理:缓存静态资源2、应用服务方面使用缓存:本地缓存、分布式缓存、多级缓存尽量异步:MQ、异步方法搭建集群:横向扩展优化编码:多线程、算法、数据结构、对象复用(池化)、GC3、数据库字段优化:类型、建立索引、冗余走索引:执行计划、避免失效缓存原创 2020-05-26 03:58:35 · 801 阅读 · 0 评论 -
压测工具ab的简单使用说明
ab的全称是Apache Bench,是比较简单、容易上手的性能测试工具。这里示范一下Windows环境下的使用。一、下载安装首先到官网https://www.apachehaus.com/cgi-bin/download.plx下载软件。然后解压到你喜欢的目录,不需要安装。二、使用示范cmd命令行或者PowerShell进入到bin目录里,就可以使用对应的命令了。...原创 2019-06-30 19:27:07 · 1237 阅读 · 0 评论 -
解密JUC——构建锁和同步器的AQS
AQS,本名:AbstractQueuedSynchronizer,是Java 5引入的一个并发工具类。它提供了一个基于FIFO(先进先出)队列,可以用于构建锁或者其他相关同步装置的基础框架。它的名字翻译为抽象队列同步器,可以分为三个词:抽象、队列、同步器。正好不知道怎么开始,那么现在我们就以名字的三个词作为切入点。但是为了逻辑讲得清晰,我调了一下顺序:同步器->抽象->队...原创 2019-07-02 23:58:04 · 505 阅读 · 0 评论 -
解密JUC——非阻塞同步指令CAS
一、为什么使用CAS?CAS是啥?在多线程中,为了保证一系列的操作具有原子性,独占锁是比较简单实用的同步机制,但它是一项悲观技术,对系统性能有严重的损耗,因为它假设了最坏的情况:如果你不锁门,那么捣蛋鬼就会闯入并搞得一团糟。对于细粒度的操作,还有另外一种更加高效的办法,可以在不发生干扰的情况下完成更新操作。这种方法需要借助冲突检查机制来判断在更新过程中是否存在来自其它线程的干扰,如果存在,...原创 2019-07-01 22:28:43 · 336 阅读 · 0 评论 -
线程进入休眠状态的三种方式:Thread.sleep、Object.wait、LockSupport.park
一、线程睡眠Thread.sleep1)需要指定睡眠时间,如Thread.sleep(10_000);// 睡眠10秒// TimeUnit.MINUTES.sleep(1);// 睡眠一分钟2)睡眠时线程状态为TIMED_WAITING(限期等待)。3)需要捕获InterruptedException异常。4)不会释放持有的锁。二、线程等待Object.wait1...原创 2019-05-11 13:08:24 · 6029 阅读 · 0 评论 -
大型网站的架构
一、大型网站的软件系统的特点高并发,大流量 高可用 海量数据 用户分布广泛,网络情况复杂 安全环境恶劣 需求快速变更,发布频繁 渐进式发展二、大型网站的架构演化发展历程1、初始阶段的网站架构最开始网站的应用程序、数据库、文件等所有的资源都在一台服务器上。最典型的就是LAMP技术了:服务器操作系统使用Linux,应用程序使用PHP开发,数据库使用MySQL,然后部署在Apa...原创 2019-01-01 13:28:14 · 7816 阅读 · 3 评论 -
ForkJoin
一、认识Fork JoinFork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。如图所示,整个过程分为两部分:首先将大任务分成若干小任务(Fork),然后并行处理后把小任务执行的结果汇总(Join)。二、相关知识1、线程池以前我们使用线程的时候就去创建一个线程,这样实现起来非...原创 2018-07-31 17:30:01 · 242 阅读 · 0 评论 -
Redis分布式锁
先看一个例子:在商品秒杀活动中,多个线程一起进行下单,它们首先查询库存数量,接着判断是否符合条件,然后保存订单信息,最后将库存数量减一后更新到数据库。在这个过程中,存在着共享资源(库存数量),而且一系列的操作没有原子性(每个环节之间都可能被其它线程抢走了CPU执行权)。所以,就存在着线程安全问题,表现出来的结果通常就是“商品超卖”。下面我们用代码模拟一下这个场景:1、定义两种商品1和2,并...原创 2018-08-05 01:06:05 · 530 阅读 · 0 评论 -
Java多线程并发协同
Java并发相关技术:线程池、线程安全(锁)、多线程并发协同、并发集合类、原子类。什么是并发协同?多个线程并发,协同来完成一件事情的过程中,因事情处理的需要,需控制某些线程阻塞,等待另一些线程完成某部分事情,再继续执行的过程。并发协同原理:分析并发协同问题的常用思路并发的是什么?在什么地方需要协同?该谁等待?谁来通知?并发协同的实现方式多线程协同执行都基于条...原创 2018-08-02 22:51:26 · 8085 阅读 · 0 评论 -
多线程高并发总结
1、synchronized对某个对象加锁(互斥锁),申请的纪录在堆内存里的对象,执行完代码就释放。2、synchronized锁的是对象,而不是代码块。3、在方法上加synchronized相当于synchronized(this)。4、synchronized用在静态方法上,相当于synchronized(T.class),即锁住类对象。5、各个代码块之间没有原子性,执行需要重...原创 2018-07-21 22:40:15 · 1169 阅读 · 0 评论