通行证:用 户 密 码 注册 www.pconline.cn 汽车网 游戏网 时尚女性
  太平洋电脑网
首 页 |
论 坛 |
今日报价 | 产业资讯 | 数码世界 | 硬件资讯 | 软件资讯 | 下载中心 | 游 戏 |
产 品 库 | 渠道商情 | 招聘培训 | 二    手 | 评 测 室 | 导购大全 | 社 区 |
摄影
部落
北京 上海 广州 深圳 香港 广西
重庆 山东 江苏 辽宁 福建 成都
手机 数码相机 随身听 DIY配件 笔记本 台式机 摄像机 精品廊
手 机 数码相机 随身听 DIY配件 笔记本 台式机 摄像机 精品廊
   
   
首页 资讯 网络 系统 开发 认证 课程 考题下载 职场 找工作 找人才 服务指南  
 
认证专区: | Cisco | Microsoft | Sun | Oracle | IT设计 | 考题分析 | 软件水平考试 |
 
您现在的位置: 招聘与培训 > 程序开发 > SUN > SUN技术文章 免费新闻代码RSS新闻聚合
 
Java游戏起步:(一)线程与线程池
作者:unrealwalker 责任编辑:liyalin

   任何游戏都至少需要运行两个线程,主线程和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();
    }


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

    public synchronized void close() {
        if (isAlive) {
            isAlive = false;
            taskQueue.clear();
            interrupt();
        }
    }


    /**
        关闭线程池并等待所有线程完成,执行等待的任务
    */

    public void join() {
        //告诉等待线程线程池已关
        synchronized (this) {
            isAlive = false;
            notifyAll();
        }

        // 等待所有线程完成
        Thread[] threads = new Thread[activeCount()];
        int count = enumerate(threads);
        for (int i=0; i<count; i++) {
            try {
                threads[i].join();
            }
            catch (InterruptedException ex) { }
        }
    }

察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:



[1] [2] [下一页]
更多相关搜索: JAVA.. 游戏.. 开发..

 
本栏今日更新
相关文章
 
·初手指南:什么是 Microsoft .NET?
·Java 最佳学习途径(四)----终结篇
·Java 最佳学习途径(三)----过程篇
·Java 最佳学习途径(二)----书籍篇
·Java 学习最佳途径(一)---工具篇
·软考指南:程序员数据结构笔记
·路在何方:JAVA入门学习指导方向
·指点迷津系列:该不该去考JAVA认证?
·果然是真的!尼康数码单反D200真机及镜头曝光图
·送给天蝎座的情人礼物!近期个性DC选购趣谈
·普及化的背后:论DV平民化的“傻瓜”之路
·国产软件显威力!实战数码相机CCD坏点屏蔽修复!
·又一国货精品 POYA新品MP3 S120详评
·实用新突破!可爱精灵富士Z2详细测试报告
·让画面动感十足 用DV拍摄鲜花绽放过程
·镜王将逝?佳能24-105mm F4镜头面临缺陷质疑

  发给好友 我要报错 投稿给我们 加入收藏 返回顶部  
 
新闻搜索
高级搜索
本栏今日焦点
-
栏目热点推荐
招聘与培训
很多上班族都有的毛病,看看你占了几条?

招聘与培训
BBC记者眼中的上海-一个充满对比的城市

招聘与培训
求职最受欢迎的十大技能(趣味组图)

招聘与培训
05届毕业生就业率:大专生:本科生=40:70

关于太平洋 | 网站地图 | 广告指南 | 联系我们 | 招聘精英 | 合作联系


广东省通信管理局
粤ICP证号:000010
技术支持与报障:support@pconline.com.cn
        020-87568837
        
对本站有任何建议、意见或投诉,请点这里在线提交.
本网站简体、繁体两种版本,以简体版为准
PConline版权所有,未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任__