实现一个流控程序。控制客户端每秒调用某个远程服务不超过N次,客户端是会多线程并发调用,需要一个轻量简洁的实现,大家看看下面的一个实现,然后可以自己写一个实现。
package test.token; import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; public class Test { final static int MAX_QPS = 10; final static Semaphore semaphore = new Semaphore(MAX_QPS); public static void main (String ... args) throws Exception { Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() { @Override public void run() { semaphore.release(MAX_QPS/2); } }, 1000, 500, TimeUnit.MILLISECONDS); //lots of concurrent calls:100 * 1000 ExecutorService pool = Executors.newFixedThreadPool(100); for (int i=100;i>0;i--) { final int x = i; pool.submit(new Runnable() { @Override public void run() { for (int j=1000;j>0;j--) { semaphore.acquireUninterruptibly(1); remoteCall(x, j); } } }); } pool.shutdown(); pool.awaitTermination(1, TimeUnit.HOURS); System.out.println("DONE"); } private static void remoteCall(int i, int j) { System.out.println(String.format("%s - %s: %d %d",new Date(), Thread.currentThread(), i, j)); } }
相关推荐
│ 高并发编程第二阶段44讲、被动引用和类加载过程的练习巩固训练题.mp4 │ 高并发编程第二阶段45讲、ClassLoader加载阶段发生的故事.mp4 │ 高并发编程第二阶段46讲、ClassLoader链接阶段(验证,准备,解析)...
│ 高并发编程第二阶段44讲、被动引用和类加载过程的练习巩固训练题.mp4 │ 高并发编程第二阶段45讲、ClassLoader加载阶段发生的故事.mp4 │ 高并发编程第二阶段46讲、ClassLoader链接阶段(验证,准备,解析)...
首先,"Java线程并发面试题87.pdf"很可能包含了87个关于Java并发的常见面试问题,这些问题涵盖了线程基础知识、同步机制、线程池、死锁避免与解决、并发集合类的使用等多个方面。例如,可能会讨论Java中如何实现线程...
【标题】"项目实战试题"涉及的是一个基于C#编程语言的网吧计费系统开发实践。这个项目可能是一个综合性的软件开发案例,旨在提升开发者在实际工作中的技能和经验。 【描述】提到“功能全部都实现了”,这表明该试题...
Java面试题+Java并发编程(J.U.C)+Java8实战+Redis+kafka Java 『必看』2021 版最新Java 学习路线图(持续刷新):+1::+1::+1: Java入门面试题 Java基础入门80问,适合新手,老鸟直接跳过 Java并发编程(J.U.C) ...
本文将深入探讨这些主题,并结合"java并发编程实战"的实践案例,以及"驾校K1考试试卷批量生成源代码"的示例,帮助你理解和掌握Java并发编程的核心概念。 首先,我们要理解什么是并发编程。并发编程是指在同一时间段...
本资源包涵盖了这两个主题,提供了实际操作的案例,包括"java并发编程实战"和"驾校K1考试试卷批量生成mysql表结构和数据"。 首先,让我们深入了解一下Java并发编程。Java并发编程是多线程编程的一种形式,它允许...
《实战Java高并发程序设计》是一本专注于Java并发编程实践的书籍,由葛一鸣等专业人士编著。这本书深入浅出地讲解了如何在Java环境中有效地处理高并发问题,为读者提供了丰富的实战经验和技巧。 首先,Java并发编程...
理解线程同步、互斥、死锁等概念,以及synchronized、wait/notify等机制,有助于编写高效的并发程序。 7. **字符串处理**:String类在Java中被广泛使用。理解字符串的不可变性、拼接效率、正则表达式等特性,能提高...
"Java并发编程实战"这部分内容主要涉及如何有效地利用多核处理器,提高程序的执行效率,降低系统资源的消耗。 并发编程的核心概念包括线程、同步、锁机制以及并发控制工具,如Semaphore、CyclicBarrier和...
《Go 进阶实战 100 题》是一份深入探讨Go语言高级特性和实践技巧的资源,旨在帮助开发者提升对Go语言的理解和应用能力。这份资料可能包含了从并发编程、错误处理到内存管理和性能优化等多方面的挑战题目,通过解决...
本资源包"JAVA面试题并发篇源码及资料"显然是为了帮助开发者准备关于并发编程的面试而设计的,它可能包含了源码示例、理论解释、实战问题和解决方案等。 在Java并发编程中,有几个关键的知识点是面试官常常关注的:...
掌握并发编程还需要阅读经典图书和关注相关网络资源,例如《Java并发编程实战》等。 12. **业界发展**: 随着技术的发展,GPGPU和OpenCL等技术提供了新的并行计算平台,使得并发编程有了更多可能性。 13. **复习...
《疯狂Java实战演义》是一本深度探讨Java编程技术的书籍,它包含了丰富的实践项目和课后习题,旨在帮助读者提升Java编程能力并深入理解Java核心技术。书中的源码是作者精心设计和编写的,提供了详尽的示例,以便读者...
通过第1题和第2题的实践,你可以巩固这些基础知识,了解如何在实际项目中运用它们。 2. 面向对象编程: C#是完全面向对象的语言,支持类、接口、继承、多态等概念。在书中的习题中,你可能会遇到创建自定义类、...
在BBS系统中,这有助于处理如并发控制、资源限制等问题。 5. 游标:在处理大量数据时,游标允许我们逐行处理结果集,这对BBS中的数据分页展示、按需加载等场景非常有用。 6. 包(Package):PL/SQL中的包可以将...
并发编程实战》阅读笔记 有关 Java 并发编程~ 别急别急,在重写它啦~,会补充一些新的内容进去,预计 2020/02 完成。 Content Java 并发编程基础 保证线程安全的两个角度 构造安全的并发应用程序 Java 并发高级主题 ...
第21章可能涉及“线程与并发”,讲解了如何在C#中创建和管理线程,以及如何处理多线程中的同步和异步问题,如Mutex、Semaphore和Monitor等同步原语。 第22章可能讲解了“反射与元数据”,这是一个强大的功能,允许...
《Spark大数据分析与实战》课程是一门深入探讨Apache Spark在大数据处理领域的应用和技术的课程,其课后练习答案集提供了对课程所讲授知识的巩固和实践。这是一份珍贵的配套教学资源,旨在帮助学生更好地理解和掌握...
对于进阶学习者,线程和并发编程是提升程序性能的关键。Java提供了强大的线程管理机制,包括同步和锁机制,使多个线程能够同时执行任务。此外,Java的反射API允许程序在运行时检查和修改自身的结构,增加了编程的...