- 浏览: 783349 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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)
最新评论
在编程中,往往都需要采用线程来提高速度,但线程并不是越多越好。
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 860Servlet生命周期分为三个 ... -
Java中堆和栈的区别
2012-03-09 11:10 762栈与堆都是Java用来在Ram ... -
Collection 和 Map接口及其实现类总结
2012-03-09 11:09 997Collection接口 Collection是 ... -
HTTP状态码
2012-01-30 15:18 1245常见的状态码: HTTP: Status 200 – 服务 ... -
Flex错误码列表
2012-01-30 15:13 1264在 ActionScript 3.0 中,无论是在严谨模式下还 ... -
Java性能优化技巧集锦
2011-12-26 10:04 781一、通用篇 1.1 不用new关键词创建类的实例 1.2 ... -
java Web 项目优化的几个小方法
2011-12-26 10:02 13191.用Hibernate操作数据库时一定要本着用多少取多少的原 ... -
总结几点数据库效率优化方面应该注意的问题
2011-12-26 10:01 8451、 避免使用Hibernate框架 用Hiberna ... -
转载的一篇关于如何优化JAVA代码及提高效率的文章
2011-12-09 16:51 891可供程序利用的资源( ... -
Java获取IP地址:request.getRemoteAddr()警惕
2011-12-08 11:15 1114项目中需要和第三方平台接口,加了来源IP鉴权功能,测试时发现没 ... -
jsp 统计在线人数
2011-12-06 09:23 964首先写个类: import javax.s ... -
Java邮件开发源代码
2010-11-11 07:43 1050Java邮件开发源代码Java邮件开发源代码Java邮件开发源 ... -
Windows下的Mapserver——MS4W安装注意事项
2010-07-29 19:30 24961\MS4W文件夹一定要放在磁盘根目录下; 2,运行apac ... -
Java读取桌面路径的方法
2010-04-20 20:53 1294今天在写程序时需要读取桌面的路径,开始时以为需要使用JNI来 ... -
date 转换
2009-12-18 16:27 684import java.text.ParseException ... -
String indexOf substring
2009-12-18 16:26 1931public class TestString { ... -
Calendar,Date,long(Millis)转换
2009-12-18 16:23 2003//Calendar与Date、long的转换: ... -
String split()
2009-12-18 16:15 1165String split() 如字符串:http://www. ... -
String编码转换
2009-12-17 12:09 3267String newStr = new String(oldS ... -
Java日期类
2009-12-16 17:54 952/** * 比较当前日期和指定日期 return bool ...
相关推荐
基于golang实现的域名存活检测,支持多携程+单独url扫描+存活域名文件输出+线程数量控制+超时时间控制+源码+项目代码解析,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延...
本篇文章将深入探讨易语言中的多线程控制,特别是如何通过信号量来限制同时运行的线程数量,以实现更精细的并发控制。 信号量(Semaphore)是一种经典的同步机制,用于控制对共享资源的访问。在易语言中,我们可以...
本篇将深入探讨易语言中如何实现多线程控制以及线程数量的管理。 在易语言中,线程用于在单个进程中同时执行多个独立的代码段,从而提高程序的执行效率。创建线程的基本步骤包括定义线程函数、创建线程对象和启动...
本文将详细讲解如何使用GCD来控制多线程任务的数量,并以`ZKRGlobalQueue^()`为例进行说明。 GCD的基础概念: 1. 队列:GCD中的队列分为串行队列和并行队列。串行队列会按照任务的添加顺序逐一执行,而并行队列则...
本示例主要探讨了如何通过两种方法来控制Java中的线程数量,以达到优化性能和防止内存不足的目的。 首先,我们来看自定义线程池方法实现线程数控制的例子。线程池(ThreadPool)是Java并发编程中非常重要的概念,它...
本文介绍了在Java多线程环境下减少内存占用量的一些关键策略,包括线程生命周期管理、对象生命周期设计、同步机制选择、线程池的使用和线程数量控制。同时,代码的异常处理和JVM参数调优也是提升多线程应用性能的...
网站安全狗具备六大核心功能: 1、智能的网页木马和网页挂马扫描引擎,及时发现和清除木马文件。... 5、文件下载多线程数量控制,保护服务器流量资源。 6、URL长度、URL后缀漏洞检测,保护服务器安全。
- 线程数量控制:过多的线程可能导致CPU过度消耗,应合理设定线程数量。 - 网络适应性:根据网络状况动态调整下载速度和线程数。 理解这些知识点并能实际应用,开发者就能构建出功能完善的Android多线程断点续传...
本文将深入探讨如何在Linux环境下利用多线程技术来实现令牌桶流量控制。 首先,我们要理解令牌桶算法的基本原理。令牌桶算法是一个允许突发数据传输并同时保持平均传输速率的机制。桶中存储一定数量的令牌,只有当...
1. 线程数量控制:过多的线程会增加系统开销,应适当限制线程数量。 2. 错误处理:考虑网络中断、服务器错误等情况,确保断点续传的健壮性。 3. 并行与串行:根据网络条件选择合适的下载策略,例如在网络不稳定时,...
3. 线程控制:控制线程数量包括两方面,一是限制最大并发线程数,二是动态调整线程数量。可以通过计数变量来跟踪当前活动的线程数,当达到预设的最大值时,新创建的线程会被阻塞,直到其他线程结束。动态调整则根据...
在处理高并发任务时,合理控制线程池中的并发线程数量至关重要,以确保系统资源得到充分利用,同时避免过度消耗导致性能瓶颈或崩溃。 在标题和描述中提到的场景,我们需要实现一个功能,即限制线程池中并发执行的...
- **线程数量控制**:过多的线程可能会导致服务器压力过大,甚至被服务器视为攻击。因此,需要根据服务器的承受能力合理设置线程数量。 - **带宽管理**:多线程下载可能会占用大量的网络带宽,可能会影响到其他网络...
- **线程数量控制**:线程池通常有一个最大线程数限制,防止过多线程导致系统资源耗尽。 3. **C++线程库**: - `<thread>`库提供了`std::thread`类,用于创建和管理线程。`std::thread::joinable()`检查线程是否...
- **线程数量控制**:根据设备性能和网络状况合理设定并发线程数,避免过度消耗资源。 - **动态调整**:根据网络环境变化,动态调整下载策略,如在网络不稳定时降低线程数。 - **优先级调度**:根据任务优先级和...
信号量可以控制同时访问资源的线程数量;临界区是轻量级的同步机制,适用于小范围的共享数据。 线程优先级: Windows系统允许设置线程的优先级,通过`SetThreadPriority`函数可以调整线程的执行优先级。不过需要...
### 四种线程同步控制方法详解 #### 引言 在并发编程中,线程同步是至关重要的一环。为了防止多个线程间因访问共享资源导致的数据不一致或者竞态条件等问题,需要采取有效的方法来进行同步控制。本文将详细介绍四种...
- **Semaphore**:信号量,限制同时访问资源的线程数量。 - **Monitor**:基于对象锁的同步,使用Enter/Exit方法或using Monitor语句块。 - **Lock语句**:提供了一种简单的同步机制,确保代码块在同一时刻只被一...
开发者需要根据任务特性选择合适的线程数量,避免过度使用导致系统负担过重。 通过学习和分析"易语言多线程高级控制源码",开发者不仅可以了解易语言的多线程编程基础,还能深入理解如何在实际项目中应用多线程技术...