java怎么使用Semaphore实现限流器

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

创新互联建站专业网站制作、网站设计,集网站策划、网站设计、网站制作于一体,网站seo、网站优化、网站营销、软文推广等专业人才根据搜索规律编程设计,让网站在运行后,在搜索中有好的表现,专业设计制作为您带来效益的网站!让网站建设为您创造效益。

概念

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实现限流器这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


当前标题:java怎么使用Semaphore实现限流器
浏览路径:http://myzitong.com/article/giepsi.html