美文网首页
java信号量限流

java信号量限流

作者: JTwooooo | 来源:发表于2019-07-11 09:11 被阅读0次
1、单机使用Semaphore进行限流:
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

public class SemaphoreLimiter {

    private final Semaphore permit = new Semaphore(10, true);

    public void process(int i) {
        try {
            permit.acquire(); // 阻塞的方式
            System.out.println("处理逻辑" + i);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public void processTry(int i) {
        boolean acquired = permit.tryAcquire();

        if (acquired) {
            try {
                System.out.println("处理业务逻辑" + i);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                System.out.println("释放信号量");
                permit.release();
            }
        } else {
            System.out.println("降级处理");
        }
    }

    public static void main(String[] args) {
        Executor executors = Executors.newFixedThreadPool(50);
        SemaphoreLimiter sl = new SemaphoreLimiter();

        for (int i = 0; i < 1000; i++) {
            final int num = i;
            executors.execute(new Runnable() {
                @Override
                public void run() {
                    //sl.process(num);
                    sl.processTry(num);
                }
            });
        }

    }

}

使用Semaphore信号量进行限流
accquire tryAcquire release

2 Semaphore实现

相关文章

  • 限流降级方案

    限流算法 并发数限流 计数器并发数限流:使用共享变量实现 信号量:使用java中的Semaphore QPS限流 ...

  • java信号量限流

    1、单机使用Semaphore进行限流: 使用Semaphore信号量进行限流accquire tryAcqui...

  • 限流算法实现

    并发数限流 1. 计数器并发数限流 2. 信号量(Semaphore) 其实最简单的方法就是用信号量来实现: QP...

  • 限流令牌桶实现

    限流令牌桶实现 我们redis最开始的限流只是用Semaphore信号量来限流,一个请求先acquire 然后在r...

  • 基于信号量和令牌桶算法的限流

    限流的三种算法 限流主要有三种算法:信号量、漏桶算法和令牌桶算法。 信号量限制的是并发、资源。令牌桶限制的是QPS...

  • Semaphore

    信号量,最多可以有多少线程去执行。使用的场景:限流例如:卖票窗口,收费高速口等

  • java信号量Semaphore与计数AtomicLong限流

    下面是使用信号量限制并发访问的一个简单例子 这里我们创建了 100 个线程同时执行,但是由于信号量计数为 10,所...

  • java concurrency <信号量>

    java concurrency <信号量> 使用信号量的目的 线程信号量的目的是使线程能够彼此发送信号。 此外,...

  • 高并发编程-13-加点小菜-信号量

    1,什么是信号量 java.util.concurrent.Semaphore信号量是一个计数信号量。这就意味着使...

  • Java并发编程之Semaphore的使用

    1. 总览 在这个快速教程中,我们将会探索Java中信号量和互斥锁的基础知识。 2. 信号量 我们将从java.u...

网友评论

      本文标题:java信号量限流

      本文链接:https://www.haomeiwen.com/subject/ipilkctx.html