import java.util.*;
public class WorkQueue
{
private final int nThreads;//线程池的大小
private final PoolWorker[] threads;//用数组实现线程池
private final LinkedList queue;//任务队列
public WorkQueue(int nThreads){
this.nThreads = nThreads;
queue = new LinkedList();
threads = new PoolWorker[nThreads];
for (int i=0; i<nThreads; i++) {
threads[i] = new PoolWorker();
threads[i].start();//启动所有工作线程
}
}
public void execute(Runnable r) {//执行任务
synchronized(queue) {
queue.addLast(r);
queue.notify();
}
}
private class PoolWorker extends Thread {//工作线程类
public void run() {
Runnable r;
while (true) {
synchronized(queue) {
while (queue.isEmpty()) {//如果任务队列中没有任务,等待
try{
queue.wait();
}catch (InterruptedException ignored){}
}
r = (Runnable) queue.removeFirst();//有任务时,取出任务
}
try {
r.run();//执行任务
}catch (RuntimeException e) {
// You might want to log something here
}
}
}
}
public static void main(String args[]){
WorkQueue wq=new WorkQueue(10);//10个工作线程
Mytask r[]=new Mytask[20];//20个任务
for(int i=0;i<20;i++){
r[i]=new Mytask();
wq.execute(r[i]);
}
}
}
class Mytask implements Runnable{//任务接口
public void run(){
String name=Thread.currentThread().getName();
try{
Thread.sleep(100);//模拟任务执行的时间
}catch(InterruptedException e){}
System.out.println(name+" executed OK");
}
}
转自:http://www.cnblogs.com/null7/archive/2012/09/20/2696108.html
分享到:
相关推荐
本资源“java concurrent 精简源码”着重关注Java并发库(java.util.concurrent)的核心概念,包括阻塞队列和线程管理。下面将详细阐述这些知识点。 1. **Java并发库(java.util.concurrent)** Java并发库是Java ...
2. **任务队列管理**:设计高效的任务队列,确保线程的充分利用,同时避免因队列过长而造成的延迟。 3. **线程优先级调整**:在资源紧张的情况下,可以通过调整线程优先级来优化关键任务的执行,保证网络通信的...
### Java网络编程精简第三章(ServerSocket)详解 #### 一、ServerSocket类概览 在Java网络编程中,`ServerSocket`类扮演着核心角色,尤其在客户端/服务器模型中,它作为服务器端的主要组件,负责监听特定端口上的...
这份"java面试题100道精简版.doc"文档很可能是对以上各个领域的经典问题和解答的集合,对于备考Java面试的人来说,它是宝贵的复习资料。通过深入理解和实践这些知识点,不仅可以提高面试成功率,也有助于提升实际...
《Pro Java EE 5 Performance Management and Optimization》是针对Java企业版5(JEE5)的一本专业性能管理和优化指南。这本书深入探讨了如何在Java EE 5平台上开发高效率、高性能的应用程序。以下是对该书内容的...
根据给定的文件信息,以下是从“ActiveMQ In Action精简版”中提炼出的关键IT知识点,主要聚焦于ActiveMQ的介绍、配置、使用及高级功能。 ### ActiveMQ概述 ActiveMQ是Apache软件基金会下的一个开源项目,它是一款...
通常需要调整的参数包括`-Xms`(初始堆大小)、`-Xmx`(最大堆大小)、`-XX:NewRatio`(新生代与老年代的比例)、`-XX:SurvivorRatio`(年轻代中Eden区与Survivor区的比例)以及`-XX:MaxTenuringThreshold`(对象...
其次,`JVM-Tomcat线程-数据库连接池设置建议.docx`文件可能包含了关于Java虚拟机(JVM)和Tomcat应用服务器的线程池及数据库连接池的优化策略。JVM的堆内存分配、垃圾回收策略、以及线程池大小等都需要根据实际负载...
它提供了全面的企业级服务,包括事务处理、消息队列、安全性和数据库连接等功能。在本"jboss5纯净版80端口"中,我们关注的是其优化后的特性和配置更改。 首先,"纯净版"通常意味着去除了不必要的组件和插件,使得...
此模板关注Tomcat的JVM内存使用、线程池状态、请求处理时间和错误率,有助于确保Web应用的稳定运行。 5. **zabbix php-fpm模块.xml**: PHP-FPM(FastCGI Process Manager)是PHP的FastCGI实现。此模板提供对...
对于Connector的线程管理,Tomcat允许用户配置线程池的最小线程数(minThreads)、最大线程数(maxThreads)和等待队列的长度(acceptCount)。当服务器启动时,Connector会根据配置来创建一组线程。如果线程池中...