如何控制某个方法允许并发访问线程的个数?
2018-01-17 15:17
363 查看
如何控制某个方法允许并发访问线程的个数?
1 package com.soyoungboy; 2 3 import java.util.concurrent.Semaphore; 4 /** 5 * 6 * @author soyoungboy 2017年1月25日15:51:15 7 * 8 */ 9 public class SemaphoreTest { 10 static Semaphore semaphore = new Semaphore(5,true); 11 public static void main(String[] args) { 12 for(int i=0;i<100;i++){ 13 new Thread(new Runnable() { 14 15 @Override 16 public void run() { 17 test(); 18 } 19 }).start(); 20 } 21 22 } 23 24 public static void test(){ 25 try { 26 //申请一个请求 27 semaphore.acquire(); 28 } catch (InterruptedException e1) { 29 e1.printStackTrace(); 30 } 31 System.out.println(Thread.currentThread().getName()+"进来了"); 32 try { 33 Thread.sleep(1000); 34 } catch (InterruptedException e) { 35 e.printStackTrace(); 36 } 37 System.out.println(Thread.currentThread().getName()+"走了"); 38 //释放一个请求 39 semaphore.release(); 40 } 41 }
构造函数创建了一个 Semaphore 对象,并且初始化了 5 个信号。这样的效果是控件 test 方法最多只能有 5 个线程并发访问,对于 5 个线程时就排队等待,走一个来一下;
请求一个信号(消费一个信号),如果信号被用完了则等待;
释放一个信号,释放的信号新的线程就可以使用了.
相关文章推荐
- 如何控制某个方法允许并发访问线程的个数?
- 使用Semaphore控制某个方法允许并发访问的线程的个数
- 多线程线程池控制一个方法的并发量 限制只有5个线程执行任务
- Spring 是如何解决并发访问的线程安全性问题的
- 应用程序中的所有线程都可以访问方法中的公用字段。要同步对公用字段的访问,您可以使用属性替代字段,并使用 ReaderWriterLock 对象控制访问。为此,请按照下列步骤操作:
- SE高阶(4):多线程(并发)—①创建启动方式和控制线程方法
- SpringMVC 限定某个业务控制方法,只允许GET或POST请求方式访问
- 线程如何控制并发数量? Semaphore 线程协同类,用来控制线程并发数量
- 13SpringMvc_限定某个业务控制方法,只允许GET或POST请求方式访问
- 如何控制Java中的线程,总结了3种方法...
- 如何控制线程并发数,如何使用信号池和线程池?
- 自己总结线程并发的访问资源的解决方法
- 【SpringMVC】限定某个业务控制方法,只允许GET或POST请求方式访问(十二)
- 线程同步方法和差别~(高并发中多个线程访问统一资源域,容易出现线程安全性)
- Java并发库(十四):控制线程访问数量Semaphore
- springmvc中一个Action中,写多个类似的业务控制方法+在业务控制方法中写入普通变量收集参数+限定某个业务控制方法。只允许GET或POST请求方式访问
- (三)线程同步工具集_1---控制线程并发访问一个资源
- 高并发访问时如何确保服务器端session过多而造成内存溢出致使服务器宕机的方法之一
- JDK并发包---(7)允许多个线程同时访问的:信号量(Semaphore)
- java 中 如何让一个方法内最多只能指定数量线程访问