加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java多线程的Semaphore

发布时间:2020-12-15 05:28:52 所属栏目:Java 来源:网络整理
导读:Semaphore 信号量,在多线程应用中,用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量,还可以用来实现某种资源池限制,或者对容器施加边界. 简单地说,Semaphore就是synchronized的加强版,可以控制线程的并发数量. 控制对某一方法并发的

Semaphore 信号量,在多线程应用中,用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量,还可以用来实现某种资源池限制,或者对容器施加边界. 简单地说,Semaphore就是synchronized的加强版,可以控制线程的并发数量.

控制对某一方法并发的访问数量

public class DemoSemaphore {
    # 1表示同时只允许1个线程访问,3则表示3个
    private Semaphore semaphore = new Semaphore(3);

    public void exec() {
        try {
            semaphore.acquire();
            long threadId = Thread.currentThread().getId();
            System.out.println(threadId + " acquired");
            long rand = (long)(Math.random() * 1000);
            Thread.sleep(rand);
            System.out.println(threadId + " end");
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            semaphore.release();
        }
    }

    public static void main(String[] args) {
        DemoSemaphore demo = new DemoSemaphore();
        for (int i = 0; i < 30; i++) {
            new Thread(demo::exec).start();
        }
    }
}

.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读