- 浏览: 763602 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (573)
- Java基础 (76)
- C++基础 (5)
- hibernate (5)
- struts (4)
- spring (1)
- webservice (7)
- AjaX基础 (0)
- JS脚本 (53)
- 正则表达式 (5)
- html脚本 (30)
- 数据库基础 (54)
- 工作相关 (49)
- 其他 (30)
- Linux (9)
- web服务器 (17)
- JSP (13)
- eclipse (6)
- 面试题相关 (20)
- XML (3)
- Apache common (2)
- 生活 (35)
- VMware (1)
- log4j (9)
- BeanUtils (2)
- 设计模式 (3)
- UML (1)
- UNIX (1)
- ibats (5)
- GT-Grid (17)
- ABAP学习 (17)
- ABAP (35)
- ABAP--ALV (11)
- ABAP--WEBDIMPRO (0)
- abap-sample (1)
- BEMS (2)
- flex (33)
- GIS技术 (3)
最新评论
线程的数量控制
- 博客分类:
- Java基础
在编程中,往往都需要采用线程来提高速度,但线程并不是越多越好。
1. 线程越多,JVM 所占资源越多
2. 线程越多,越容易造成资源冲突,如果处理不当,造成死锁。
所以,在启动线程的时候要根据应用程序的特点限制线程的数量。
本程序采用了java.util.concurrent的锁进行线程数量控制,测试代码如下:
输入结果为:
begin
current 1=6
current 0=6
current 5=5
current 3=4
current 4=4
current 2=4
current 7=4
current 6=3
current 8=3
current 9=3
end..........
这个程序里,限制了线程的数量为5,但线程超过5个时,就排队等待。
1. 线程越多,JVM 所占资源越多
2. 线程越多,越容易造成资源冲突,如果处理不当,造成死锁。
所以,在启动线程的时候要根据应用程序的特点限制线程的数量。
本程序采用了java.util.concurrent的锁进行线程数量控制,测试代码如下:
/** * 专注互联网,分享创造价值 * maoxiang@gmail.com */ package cn.jteam.app.taobao.spider; import java.net.InetAddress; import java.util.concurrent.CountDownLatch; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * * 作用: */ public class TestThreadLock { private Lock lock = new ReentrantLock(); final Condition full = lock.newCondition(); final CountDownLatch startSignal = new CountDownLatch(1); private int threads; CountDownLatch signal = new CountDownLatch(5); public void addThreads() throws Exception { lock.lock(); try { if (threads > 5) { full.await(); } threads++; } finally { lock.unlock(); } } public void removeThreads() { lock.lock(); try { if (threads <= 5) { full.signal(); } threads--; } finally { lock.unlock(); } } /** * 测试线程 * @throws Exception */ public void run() throws Exception { for (int i = 0; i < 10; i++) { addThreads(); final int j = i; (new Thread() { @Override public void run() { try { sleep(500); System.out.println("current " + j + "=" + threads); } catch (Exception e) { e.printStackTrace(); } finally { removeThreads(); if (threads == 0) { startSignal.countDown(); } } } }).start(); } startSignal.await(); } public static void main0(String[] args) throws Exception { System.out.println("begin"); TestThreadLock test = new TestThreadLock(); test.run(); System.out.println("end.........."); } }
输入结果为:
begin
current 1=6
current 0=6
current 5=5
current 3=4
current 4=4
current 2=4
current 7=4
current 6=3
current 8=3
current 9=3
end..........
这个程序里,限制了线程的数量为5,但线程超过5个时,就排队等待。
发表评论
-
Servlet生命周期与工作原理
2012-06-14 13:28 832Servlet生命周期分为三个 ... -
Java中堆和栈的区别
2012-03-09 11:10 731栈与堆都是Java用来在Ram ... -
Collection 和 Map接口及其实现类总结
2012-03-09 11:09 959Collection接口 Collection是 ... -
HTTP状态码
2012-01-30 15:18 1212常见的状态码: HTTP: Status 200 – 服务 ... -
Flex错误码列表
2012-01-30 15:13 1231在 ActionScript 3.0 中,无论是在严谨模式下还 ... -
Java性能优化技巧集锦
2011-12-26 10:04 742一、通用篇 1.1 不用new关键词创建类的实例 1.2 ... -
java Web 项目优化的几个小方法
2011-12-26 10:02 12861.用Hibernate操作数据库时一定要本着用多少取多少的原 ... -
总结几点数据库效率优化方面应该注意的问题
2011-12-26 10:01 8121、 避免使用Hibernate框架 用Hiberna ... -
转载的一篇关于如何优化JAVA代码及提高效率的文章
2011-12-09 16:51 847可供程序利用的资源( ... -
Java获取IP地址:request.getRemoteAddr()警惕
2011-12-08 11:15 1086项目中需要和第三方平台接口,加了来源IP鉴权功能,测试时发现没 ... -
jsp 统计在线人数
2011-12-06 09:23 931首先写个类: import javax.s ... -
Java邮件开发源代码
2010-11-11 07:43 1019Java邮件开发源代码Java邮件开发源代码Java邮件开发源 ... -
Windows下的Mapserver——MS4W安装注意事项
2010-07-29 19:30 24551\MS4W文件夹一定要放在磁盘根目录下; 2,运行apac ... -
Java读取桌面路径的方法
2010-04-20 20:53 1266今天在写程序时需要读取桌面的路径,开始时以为需要使用JNI来 ... -
date 转换
2009-12-18 16:27 662import java.text.ParseException ... -
String indexOf substring
2009-12-18 16:26 1901public class TestString { ... -
Calendar,Date,long(Millis)转换
2009-12-18 16:23 1970//Calendar与Date、long的转换: ... -
String split()
2009-12-18 16:15 1107String split() 如字符串:http://www. ... -
String编码转换
2009-12-17 12:09 3238String newStr = new String(oldS ... -
Java日期类
2009-12-16 17:54 930/** * 比较当前日期和指定日期 return bool ...
相关推荐
@波段神行。
iOSGCD控制多线程任务数量,直接使用ZKRGlobalQueue^()。
网站安全狗具备六大核心功能: 1、智能的网页木马和网页挂马扫描引擎,及时发现和清除木马文件。... 5、文件下载多线程数量控制,保护服务器流量资源。 6、URL长度、URL后缀漏洞检测,保护服务器安全。
3、线程数量控制 4、尽量不要强制结束线程 第六节 多线程QQ查询微博账号 (巩固简单多线程的编写) 1、过程梳理 2、多线程实现 3、流程控制 4、线程运行中统计数量 第七节 共享资源和私有资源
MutilTask 多线程demo。支持 Start 启动,Stop停止,Pause暂停,Continue 恢复。支持线程数量控制。
易语言-易语言多线程控制线程数量源码
@我是你亲表哥。
主要介绍了C#实现控制线程池最大数并发线程的相关资料,需要的朋友可以参考下
删除了,这个有bugde MutilTask 多线程demo。支持 Start 启动,Stop停止,Pause暂停,Continue 恢复。支持线程数量控制。
多线程控制 线程池模式 HTTP线程 用户点击数量控制在一个线程池模式下
安全狗4.0防火墙坑DDOS坑CC攻击 网站安全狗是一款集网站内容安全防护、网站资源保护及网站流量保护功能为一体的...5、文件下载多线程数量控制,保护服务器流量资源。 6、URL长度、URL后缀漏洞检测,保护服务器安全
android异步加载图片,升级版,添加多线程并发控制,可设置并发请求线程数量
易语言-易语言多线程控制:信号量控制线程数量
今天小编就为大家分享一篇python自定义线程池控制线程数量的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
多线程控制:信号量控制线程数量
程序可以控制启动线程的是数量,可以控制日志线程启动时间。 示例设置日志线程每个1分钟收集,3个任务线程处理的日志,写入log文件到本地。 3个任务线程在处理完任务后,继续开启新线程进行任务处理,但总数不超过...
WEB API 多线程并发测试工具; WEB API 多线程并发测试工具
用VC6.0编写的MFC多线程文件搜索器,其中用到了多线程函数、多线程退出函数以及一些API函数,(程序中搜索的文件是指文件后缀名例如:.txt)对MFC初学者和刚学习多线程的人有很大帮助,程序中如果有什么问题可以留言...
消费者线程职责:减少商品数量,其他的都不管,全交给管理类去控制。 全局变量:单独把一些全局变量和共用的头文件放在appdata.h/.cpp 里面,这样在写的时候结构可以比较清晰,一般的成熟项目都这么写,严禁一点的还...