`
zhangchengtian66
  • 浏览: 30919 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

java线程池与工作队列

    博客分类:
  • java
阅读更多

java线程池与工作队列

http://www.newzz.cn/Program/JAVA/07244666264.html

 

 

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         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");
         }
  }
运行结果:

C:\java>java   WorkQueue
Thread-1 executed OK
Thread-2 executed OK
Thread-3 executed OK
Thread-4 executed OK
Thread-5 executed OK
Thread-6 executed OK
Thread-7 executed OK
Thread-8 executed OK
Thread-9 executed OK
Thread-10 executed OK
Thread-1 executed OK
Thread-2 executed OK
Thread-3 executed OK
Thread-4 executed OK
Thread-5 executed OK
Thread-6 executed OK
Thread-7 executed OK
Thread-8 executed OK
Thread-9 executed OK
Thread-10 executed OK   新站长

分享到:
评论
3 楼 guojian 2008-04-13  
Java 理论与实践: 线程池与工作队列

请详细的看一下这篇文章

http://www.ibm.com/developerworks/cn/java/j-jtp0730/index.html
2 楼 zhangchengtian66 2007-06-14  
是的,运行过的
1 楼 carlosbdw 2007-06-14  
这个程序你真的运行过吗?

相关推荐

    Java理论与实践:线程池与工作队列

    另一个常见的线程模型是为某一类型的任务分配一个后台线程与任务队列。AWT和Swing就使用这个模型,在这个模型中有一个GUI事件线程,导致用户界面发生变化的所有工作都必须在该线程中执行。然而,由于只有一个AWT线程...

    Java实现的线程池、消息队列功能

    NULL 博文链接:https://j2ee2009.iteye.com/blog/689161

    线程池与工作队列--Java 理论与实践

    几乎在每个服务器应用程序中都会出现线程池和工作队列问题。本文中,Brian Goetz 探讨了线程池的动机、一些基本实现和调优技术以及一些要避免的常见危险。

    并发-线程池和阻塞队列

    并发-线程池和阻塞队列 并发-线程池和阻塞队列 并发-线程池和阻塞队列

    java 线程池实现多并发队列后进先出

    NULL 博文链接:https://hoochiang.iteye.com/blog/2357124

    java线程池工作队列饱和策略代码示例

    主要介绍了java线程池工作队列饱和策略代码示例,涉及线程池的简单介绍,工作队列饱和策略的分析及代码示例,具有一定参考价值,需要的朋友可以了解下。

    java线程池整套源码工程

    1.媲美java线程池框架,整套源码资源,使用Intellij Idea开发工具,JDK1.8以上 2.带有测试代码 3.可以根据项目实际情况任意调整代码 4.任务队列、拒绝策略 5.BasicThreadPool.java、LinkedRunnableQueue.java、...

    一个java线程池死锁的例子

    线程池里的线程等待等待队列里的线程执行,等待队列里的等待线程池里的完成,相互等待

    java多线程加队列上传文件_后台处理

    java多线程加队列上传文件_后台处理

    java_thread_cn.rar_Java 线程池_java thread books_java线程_线程池_线程池调度

    中文文档,其目录如下: 线程中一些基本术语和概念 线程之间的通讯 Java线程调度 线程池 工作队列

    java线程池概念.txt

    当线程池处于SHUTDOWN或STOP状态,并且所有工作线程已经销毁,任务缓存队列已经清空或执行结束后,线程池被设置为TERMINATED状态 b:参数再次说明。这是摘自网络的解释,我觉得他比喻的很好,所以这里直接就用它的...

    BlockingQueue队列自定义超时时间取消线程池任务

    定义全局线程池,将用户的请求放入自定义队列中,排队等候线程调用,等待超时则自动取消该任务,实现超时可取消的异步任务

    java线程池示例(包含自定义拒绝策略) #资源达人分享计划#

    线程池示例(包含自定义拒绝策略),演示了如何创建一个线程池,以及添加到队列的过程,先添加到工作线程,然后是缓存队列,最后是创建临时线程

    Java理论和实践:线程池和工作队列

    几乎在每个服务器应用里,都会出现关于线程池和工作队列的问题。本文中,Brian Goetz 线程池原理、基本实现和调优技术、需要避开的一些常见误区等方面进行共享。  为何要用线程池?  有很多服务器应用,比如 ...

    Java线程池示例代码.zip

    线程池的作用: ...可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)

    自定义实现Java线程池1-模拟jdk线程池执行流程1

    1. 初始化线程执行提交的任务 2. 任务执行不过来,放入工作队列 3. 任务过多,线程和队列均处理不过来,拒绝执行(本文中将抛出RejectedExecuti

    java自定义线程池应用

    ThreadPool 线程池类 DEFAULT_POOL_SIZE 默认线程池大小 threadPool 线程队列 taskQueue 任务队列 poolSize 自定义线程池大小 通过构造启动该线程池,调用addTask 方法将task任务传入,线程池会自动分配线程去执行...

    创建Java程序中线程池的详解

    一个比较简单的线程池至少应包含线程池管理器、工作线程、任务队列、任务接口等部分。其中线程池管理器(ThreadPool Manager)的作用是创建、销毁并管理线程池,将工作线程放入线程池中;工作线程是一个可以循环执行...

Global site tag (gtag.js) - Google Analytics