zoukankan      html  css  js  c++  java
  • 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();
        }
    }
  • 相关阅读:
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS博客作业01--线性表
    C语言博客作业05--指针
    C语言博客作业04--数组
    C语言博客作业03--函数
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业02--栈和队列
    C博客作业05-指针
  • 原文地址:https://www.cnblogs.com/gouge/p/9122857.html
Copyright © 2011-2022 走看看