千家信息网

java怎么使用Semaphore实现限流器

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,这篇文章主要讲解了"java怎么使用Semaphore实现限流器",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java怎么使用Semaphore实现限
千家信息网最后更新 2025年01月17日java怎么使用Semaphore实现限流器

这篇文章主要讲解了"java怎么使用Semaphore实现限流器",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java怎么使用Semaphore实现限流器"吧!

概念

1、Semaphore可以看作是已经被广泛地翻译成信号量,从概念上讲,信号量保持了一组凭证,获得凭证的线程可以访问资源,使用完成后释放,我们可以使用信号量来限制访问特定资源的并发线程。

2、可以简单概括为:一个计数器,一个等待队列,三种方法。在信号量模型中,计数器和等待队列是透明的,只能通过信号量模型提供的三种方式访问,即互联网、acquire和release。

实例

public class SemaphoreDemo {     static class Link {    }     static class ObjPool {         final List pool;         final Semaphore semaphore;         ObjPool(int size, T t) {            pool = new Vector<>(size);            for (int i = 0; i < size; i++) {                pool.add(t);            }            semaphore = new Semaphore(size);        }         public R exec(Function func) throws Exception {            T t = null;            semaphore.acquire();            try {                System.out.println(Thread.currentThread().getName() + "---------争夺锁--------");                 t = pool.remove(0);                System.out.println(Thread.currentThread().getName() + " 拿到锁执行");                return func.apply(t);            } finally {                pool.add(t);                semaphore.release();            }        }    }     public static void main(String[] args) {        ObjPool objPool = new ObjPool(5, new Link());        for (int i = 0; i < 30; i++) {            new Thread(() -> {                try {                    objPool.exec(t -> t.toString());                } catch (Exception e) {                }            }).start();        }    }}

感谢各位的阅读,以上就是"java怎么使用Semaphore实现限流器"的内容了,经过本文的学习后,相信大家对java怎么使用Semaphore实现限流器这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0