龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

Java游戏起步:(一)线程与线程池

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
任何游戏都至少需要运行两个线程,主线程和GUI线程 而线程池是一个治理运行线程的有用工具,下面的代码示范了一个线程池的实现方法~~ ************************************************ (ThreadPool

  任何游戏都至少需要运行两个线程,主线程和GUI线程
  而线程池是一个治理运行线程的有用工具,下面的代码示范了一个线程池的实现方法~~
  ************************************************
  (ThreadPool.Java)
  import java.util.LinkedList;

  /**
      线程池是一组线程,限制执行任务的线程数
  */
  public class ThreadPool extends ThreadGroup {

      private boolean isAlive;
      private LinkedList taskQueue;
      private int threadID;
      private static int threadPoolID;

      /**
          创建新的线程池,numThreads是池中的线程数
      */
      public ThreadPool(int numThreads) {
          super("ThreadPool-" + (threadPoolID++));
          setDaemon(true);

          isAlive = true;

          taskQueue = new LinkedList();
          for (int i=0; i<numThreads; i++) {
              new PooledThread().start();
          }
      }
      /**
          请求新任务。人物在池中下一空闲线程中运行,任务按收到的顺序执行
      */
      public synchronized void runTask(Runnable task) {
          if (!isAlive) {
              throw new IllegalStateException();//线程被关则抛出IllegalStateException异常
          }
          if (task != null) {
              taskQueue.add(task);
              notify();
          }

      }

  
      protected synchronized Runnable getTask()
          throws InterruptedException
      {
          while (taskQueue.size() == 0) {
              if (!isAlive) {
                  return null;
              }
              wait();
          }
          return (Runnable)taskQueue.removeFirst();
      }

  
      /**
          关闭线程池,所有线程停止,不再执行任务
  
  

精彩图集

赞助商链接