线程的数量控制
2009-07-22 14:16
169 查看
在编程中,往往都需要采用线程来提高速度,但线程并不是越多越好。
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个时,就排队等待。
相关文章推荐
- 改进后的客户端服务器聊天功能,此版本比上版本多了加锁处理,多了客户端数量控制,多了线程join操作
- Java中怎么控制线程访问资源的数量
- C# 执行固定个数任务自行控制进入线程池的线程数量,多任务同时但是并发数据限定
- 并发工具类(三)控制并发线程的数量 Semphore
- C#中的多线程-线程同步基础 (控制线程数量)
- 线程系列09,线程的等待、通知,以及手动控制线程数量
- C#中的多线程-线程同步基础 (控制线程数量)
- python自定义线程池控制线程数量
- 转 C#多线程及控制线程数量,对for循环输出效率
- 线程数量控制
- 转 C#多线程及控制线程数量,对for循环输出效率
- Java并发库(十四):控制线程访问数量Semaphore
- RenderScript控制并行化线程数量
- 线程如何控制并发数量? Semaphore 线程协同类,用来控制线程并发数量
- Java中怎么控制线程訪问资源的数量
- C# 执行固定个数任务自行控制进入线程池的线程数量,多任务同时但是并发数据限定
- UNIX环境高级编程-第12章- 线程控制 - 二
- mapreduce中控制mapper的数量
- 嵌入式实时操作系统Nucleus中线程控制部件的实现方法
- 控制连接数量和密码保护-flashcom教程 密码保护