java Smaphore 控制并发线程数

Posted 狗哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java Smaphore 控制并发线程数相关的知识,希望对你有一定的参考价值。

概念:

  Semaphore(信号量)是用来控制同事访问特定资源的线程数量,它通过协调各个线程,已保证合理的使用公共资源。

应用场景:

  Semaphore 可以用于做流量控制,特别是共用资源有限的应用场景,比如数据库连接。假如有一个需求,要读取几万个文件的数据,因为都是IO密集型任务,我们可以启动几十个线程并发的读取,但是如果读到内存后,还需要存储到数据库中。而数据库的连接数只有10个,这时我们必须控制只有10个线程同时获取数据库连接保存数据,否则报错无法获取数据库连接。这个时候,就可以使用Semaphore来做流量控制。

package com.test;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

public class SemaphoreTest {
    
    private static final int THREAD_COUNT = 30;
    private static ExecutorService threadPool = Executors.newFixedThreadPool(THREAD_COUNT);
    private static Semaphore s = new Semaphore(10);
    
    public static void main(String[] args) {
        for (int i = 0; i < THREAD_COUNT; i ++) {
            threadPool.execute(new Runnable() {
                
                @Override
                public void run() {
                    try {
                        s.acquire();
                        System.out.println("save DATA:" + System.currentTimeMillis());
                        s.release();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    
                }
            });
        }
        threadPool.shutdown();
    }
}

 

以上是关于java Smaphore 控制并发线程数的主要内容,如果未能解决你的问题,请参考以下文章

Java并发工具类之并发数控制神器Semaphore

Java并发多线程编程——Semaphore

java开发的项目案例,大厂内部资料

Java进阶之光!2021必看-Java高级面试题总结

Java工程师面试题,二级java刷题软件

Java线程池机制