网站首页 > 技术文章 正文
在高并发、大流量的访问系统时,如果不采取适当的系统过载保护策略,可能会导致系统崩溃。那么,系统过载保护有哪些呢?
通常有:
- 漏桶算法,例如Google Guava
- 信号量控制,例如jdk原生自带的Semaphore
通过这些算法,可有效过滤过量的请求量,阻挡一部分请求流量,来保证大部分人群能继续使用系统。
这里主要示例下Semaphore的使用demo,代码如下:
/**
*
* @description: 过载保护机制之信号量的控制
* @from everycoding.com
* @date 2018年1月7日 上午10:48:45
*/
public class ThreadSubmitTester {
static ExecutorService cachedThreadPool = Executors.newFixedThreadPool(110);
static Semaphore semaphore = new Semaphore(100);
public static void main(String[] args) {
for (int i=0;i<1000000000;i++) {
cachedThreadPool.submit(new Runnable() {
@Override
public void run() {
lottery();
}
});
}
}
private static void lottery() {
try {
if (semaphore.tryAcquire(10,TimeUnit.MILLISECONDS)) {
System.out.println("success doing.......");
try {
Thread.sleep(new Random().nextInt(300));
} catch (InterruptedException e) {
e.printStackTrace();
}
semaphore.release();
} else {
System.out.println("fail doing.......");
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
示例含义:tryAcquire获取令牌,获取成功则可以往下进行,获取失败,则视为无效的过量请求,阻挡回去。
Semaphore使用时,需要对系统性能有足够了解,且参数配置得当,否则可能得不偿失。
猜你喜欢
- 2024-10-29 RT-Thread快速入门-互斥量 互斥方案用什么指标
- 2024-10-29 Datenlord |内存顺序问题(二) dataloader 内存
- 2024-10-29 操作系统概论:第二章 进程管理 简述操作系统进程管理,并举例说明
- 2024-10-29 Java多线程操作系统(生产者、消费者问题)
- 2024-10-29 高可用架构-容错机制 容错技术可以提高系统的可靠性
- 2024-10-29 计算机操作系统笔记第二章进程管理中篇
- 2024-10-29 六大进程通信机制总结 进程通信有哪几种基本类型?
- 2024-10-29 铂金04:通风报信-为何说信号量是线程间的同步良器
- 2024-10-29 记一次阿里面试题:都有哪些进程间通信方式?麻烦你不要再背了
- 2024-10-29 计算机操作系统基础笔记 《计算机操作系统》
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)