`

并发实战题

    博客分类:
  • java
阅读更多

实现一个流控程序。控制客户端每秒调用某个远程服务不超过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));
    }

}

 

分享到:
评论

相关推荐

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第二阶段44讲、被动引用和类加载过程的练习巩固训练题.mp4 │ 高并发编程第二阶段45讲、ClassLoader加载阶段发生的故事.mp4 │ 高并发编程第二阶段46讲、ClassLoader链接阶段(验证,准备,解析)...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第二阶段44讲、被动引用和类加载过程的练习巩固训练题.mp4 │ 高并发编程第二阶段45讲、ClassLoader加载阶段发生的故事.mp4 │ 高并发编程第二阶段46讲、ClassLoader链接阶段(验证,准备,解析)...

    Java高并发视频教学,并带实战java高并发程序设计,高并发面试题目

    首先,"Java线程并发面试题87.pdf"很可能包含了87个关于Java并发的常见面试问题,这些问题涵盖了线程基础知识、同步机制、线程池、死锁避免与解决、并发集合类的使用等多个方面。例如,可能会讨论Java中如何实现线程...

    项目实战试题

    【标题】"项目实战试题"涉及的是一个基于C#编程语言的网吧计费系统开发实践。这个项目可能是一个综合性的软件开发案例,旨在提升开发者在实际工作中的技能和经验。 【描述】提到“功能全部都实现了”,这表明该试题...

    Java面试题+Java并发编程(J.U.C)+Java8实战+Redis+kafka

    Java面试题+Java并发编程(J.U.C)+Java8实战+Redis+kafka Java 『必看』2021 版最新Java 学习路线图(持续刷新):+1::+1::+1: Java入门面试题 Java基础入门80问,适合新手,老鸟直接跳过 Java并发编程(J.U.C) ...

    java并发编程实战、驾校K1考试试卷批量生成源代码(单应用)

    本文将深入探讨这些主题,并结合"java并发编程实战"的实践案例,以及"驾校K1考试试卷批量生成源代码"的示例,帮助你理解和掌握Java并发编程的核心概念。 首先,我们要理解什么是并发编程。并发编程是指在同一时间段...

    java并发编程实战、驾校K1考试试卷批量生成mysql表结构和数据

    本资源包涵盖了这两个主题,提供了实际操作的案例,包括"java并发编程实战"和"驾校K1考试试卷批量生成mysql表结构和数据"。 首先,让我们深入了解一下Java并发编程。Java并发编程是多线程编程的一种形式,它允许...

    实战java高并发程序设计 分章 高清 带作业

    《实战Java高并发程序设计》是一本专注于Java并发编程实践的书籍,由葛一鸣等专业人士编著。这本书深入浅出地讲解了如何在Java环境中有效地处理高并发问题,为读者提供了丰富的实战经验和技巧。 首先,Java并发编程...

    Java语言实战题演总计91道经典例题-金桥java软件工程师培训中心

    理解线程同步、互斥、死锁等概念,以及synchronized、wait/notify等机制,有助于编写高效的并发程序。 7. **字符串处理**:String类在Java中被广泛使用。理解字符串的不可变性、拼接效率、正则表达式等特性,能提高...

    java并发编程实战、驾校K1考试试卷批量生成源代码(分布式应用和Vue)

    "Java并发编程实战"这部分内容主要涉及如何有效地利用多核处理器,提高程序的执行效率,降低系统资源的消耗。 并发编程的核心概念包括线程、同步、锁机制以及并发控制工具,如Semaphore、CyclicBarrier和...

    Go 进阶实战 100 题.zip

    《Go 进阶实战 100 题》是一份深入探讨Go语言高级特性和实践技巧的资源,旨在帮助开发者提升对Go语言的理解和应用能力。这份资料可能包含了从并发编程、错误处理到内存管理和性能优化等多方面的挑战题目,通过解决...

    JAVA面试题并发篇源码及资料

    本资源包"JAVA面试题并发篇源码及资料"显然是为了帮助开发者准备关于并发编程的面试而设计的,它可能包含了源码示例、理论解释、实战问题和解决方案等。 在Java并发编程中,有几个关键的知识点是面试官常常关注的:...

    阿里Java并发程序

    掌握并发编程还需要阅读经典图书和关注相关网络资源,例如《Java并发编程实战》等。 12. **业界发展**: 随着技术的发展,GPGPU和OpenCL等技术提供了新的并行计算平台,使得并发编程有了更多可能性。 13. **复习...

    疯狂Java实战演义【书+源码】(疯狂Java讲义课后习题项目)

    《疯狂Java实战演义》是一本深度探讨Java编程技术的书籍,它包含了丰富的实践项目和课后习题,旨在帮助读者提升Java编程能力并深入理解Java核心技术。书中的源码是作者精心设计和编写的,提供了详尽的示例,以便读者...

    《C#开发实战宝典》习题源代码

    通过第1题和第2题的实践,你可以巩固这些基础知识,了解如何在实际项目中运用它们。 2. 面向对象编程: C#是完全面向对象的语言,支持类、接口、继承、多态等概念。在书中的习题中,你可能会遇到创建自定义类、...

    北风网项目培训PLSQL编程之BBS实战项目第二讲

    在BBS系统中,这有助于处理如并发控制、资源限制等问题。 5. 游标:在处理大量数据时,游标允许我们逐行处理结果集,这对BBS中的数据分页展示、按需加载等场景非常有用。 6. 包(Package):PL/SQL中的包可以将...

    高级java笔试题-Java-Concurrency-in-Practice:《Java并发编程实战》阅读整理笔记,附加了一些《Java并发编

    并发编程实战》阅读笔记 有关 Java 并发编程~ 别急别急,在重写它啦~,会补充一些新的内容进去,预计 2020/02 完成。 Content Java 并发编程基础 保证线程安全的两个角度 构造安全的并发应用程序 Java 并发高级主题 ...

    C#开发实战宝典实战练习及例题源程序(13-25章)

    第21章可能涉及“线程与并发”,讲解了如何在C#中创建和管理线程,以及如何处理多线程中的同步和异步问题,如Mutex、Semaphore和Monitor等同步原语。 第22章可能讲解了“反射与元数据”,这是一个强大的功能,允许...

    Spark大数据分析与实战课后练习答案.rar

    《Spark大数据分析与实战》课程是一门深入探讨Apache Spark在大数据处理领域的应用和技术的课程,其课后练习答案集提供了对课程所讲授知识的巩固和实践。这是一份珍贵的配套教学资源,旨在帮助学生更好地理解和掌握...

    java 开发实战经典

    对于进阶学习者,线程和并发编程是提升程序性能的关键。Java提供了强大的线程管理机制,包括同步和锁机制,使多个线程能够同时执行任务。此外,Java的反射API允许程序在运行时检查和修改自身的结构,增加了编程的...

Global site tag (gtag.js) - Google Analytics