文档章节

java 每秒钟只允许十个线程同时并发

qimh
 qimh
发布于 11/14 10:31
字数 454
阅读 23
收藏 0
package com.qimh.thread.concurrent;


import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
 
public class TestOne {
 
	final static int MAX_QPS = 10;
 
	final static Semaphore semaphore = new Semaphore(MAX_QPS);
 
	public static void main(String[] args) throws InterruptedException {
		//启动一个定时执行执行任务的线程池,线程池中线程的数量为1,启动一秒后开始执行,每隔0.5秒执行一次
		Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {
 
			public void run() {
				semaphore.release(MAX_QPS / 2);//释放曾经被占用过的坑
			}
 
		}, 1000, 500, TimeUnit.MILLISECONDS);
 
		//创建一个有一百个线程的线程池
		ExecutorService pool = Executors.newFixedThreadPool(100);
		//提交一百个线程,去执行任务
		for (int i = 100; i > 0; i--) {
			final int x = i;
			pool.submit(new Runnable() {
 
				public void run() {
					for (int j = 1000; j > 0; j--) {//不断的获取被空出来的坑
						semaphore.acquireUninterruptibly(1);//每个线程只获取一个坑
						remoteCall(x, 0);
					}
				}
 
			});
		}
		/**
		 * shutdown和awaitTermination为接口ExecutorService定义的两个方法,一般情况配合使用来关闭线程池。

			方法简介
			shutdown方法:平滑的关闭ExecutorService,当此方法被调用时,ExecutorService停止接收新的任务并且等待已经提交的任务(包含提交正在执行和提交未执行)执行完成。当所有提交任务执行完毕,线程池即被关闭。
			
			awaitTermination方法:接收人timeout和TimeUnit两个参数,用于设定超时时间及单位。当等待超过设定时间时,会监测ExecutorService是否已经关闭,若关闭则返回true,否则返回false。一般情况下会和shutdown方法组合使用。
			--------------------- 
			作者:丑胖侠 
			来源:CSDN 
			原文:https://blog.csdn.net/wo541075754/article/details/51564359 
			版权声明:本文为博主原创文章,转载请附上博文链接!
		 */
		pool.shutdown();
		pool.awaitTermination(5, TimeUnit.SECONDS);
		System.out.println("DONE");
	}
 
	private static void remoteCall(int i, int j) {
//		System.out.println(String.format("%s - %s: %d %d", new Date(),
//				Thread.currentThread(), i, j));
		System.out.println(new Date() + "   "+
				Thread.currentThread().getName() +" " +i+"  "+ j);
		
	}
 
}

 

© 著作权归作者所有

共有 人打赏支持
qimh
粉丝 9
博文 388
码字总数 69511
作品 0
滁州
程序员
私信 提问
读书笔记之《Java并发编程的艺术》-并发编程容器和框架(重要)

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
1
15个顶级Java多线程面试题及回答

Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题。在投资银行业务中多...

LCZ777
2014/05/27
0
0
并发酷刑: 在 Java 内存模型中测试代码

不知道你是否这么觉得,而对于我来说最烦恼的bug就是处理并发问题。除非你已经掌握了利用其他工具摒弃你现有的工具. 但是,这里还有另外一个例子,因为我们已经在这里讲述了很多关于Java的知...

oschina
2014/03/12
1K
0
java中高级大公司多线程面试题

1)在Java中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它? lock接口在多线程和并发编...

java成功之路
10/30
0
0
【死磕Java并发】—– 死磕 Java 并发精品合集

【死磕 Java 并发】系列是 LZ 在 2017 年写的第一个死磕系列,一直没有做一个合集,这篇博客则是将整个系列做一个概览。 先来一个总览图: 【高清图,请关注“Java技术驿站”公众号,回复:脑...

chenssy
07/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

2018年终盘点:区块链真的结束了吗?

2018 年,大家依旧期待区块链出现“杀手级”应用,然而到了年关,终究还是没有。既然没有出现,只能认为“神功”尚未练成,但是这一年也没有虚度,让大家再一次领教了这个领域的跌宕起伏。 ...

酒逢知己千杯少
10分钟前
0
0
社交软件系统ThinkSNS+默认配置信息说明

感谢大家一直以来对社交软件系统ThinkSNS的关注,ThinkSNS Plus社交系统一直在不断优化完善。ThinkSNS Plus 本次于2018年12月3日更新发布。 本次重要更新说明如下: 1.优化默认配置信息,服务...

ThinkSNS账号
12分钟前
1
0
阿里云文件存储(NAS)助力业务系统承载双十一尖峰流量

2018天猫双11全球狂欢节,全天成交额再次刷新纪录达到2135亿元,其中总成交额在开场后仅仅用了2分05秒即突破100亿元,峰值的交易量达到惊人的高度,背后离不开阿里云大数据计算和存储能力的支...

阿里云官方博客
14分钟前
1
0
Frost & Sullivan权威报告:阿里云再次领跑云WAF大中华区市场

近日,国际权威分析机构Frost & Sullivan 针对Web应用防火墙(简称“WAF”)领域发布了《2017年亚太区Web应用防火墙市场报告》,阿里云以市场占有率45.8%的绝对优势连续两年领跑大中华区云WAF...

阿里云云栖社区
14分钟前
1
0
Axios使用拦截器全局处理请求重试

Axios拦截器 Axios提供了拦截器的接口,让我们能够全局处理请求和响应。Axios拦截器会在Promise的then和catch调用前拦截到。 请求拦截示例 axios.interceptors.request.use(function (conf...

kisshua
18分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部