java线程池游戏代码,Java游戏起步:(一)线程与线程池-JSP教程,Java技巧及代码...
任何游戏都至少需要运行两个线程,主线程和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
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
try {
threads[i].join();
}
catch (interruptedexception ex) { }
}
}
/**
用于进行任务的线程
*/
private class pooledthread extends thread {
public pooledthread() {
super(threadpool.this,
"pooledthread-" + (threadid++));
}
public void run() {
while (!isinterrupted()) {
// 得到任务
runnable task = null;
try {
task = gettask();
}
catch (interruptedexception ex) { }
// 若gettask()返回null或中断,则关闭此线程并返回
if (task == null) {
return;
}
// 运行任务,吸收异常
try {
task.run();
}
catch (throwable t) {
uncaughtexception(this, t);
}
}
}
}
}
*********************************************
要测试这个线程池,可以通过下面这个test程序!
*********************************************
(threadpooltest.java)
public class threadpooltest {
public static void main(string[] args) {
if (args.length != 2) {
system.out.println("tests the threadpool task.");
system.out.println(
"usage: java threadpooltest numtasks numthreads");
system.out.println(
" numtasks – integer: number of task to run.");
system.out.println(
" numthreads – integer: number of threads " +
"in the thread pool.");
return;
}
int numtasks = integer.parseint(args[0]);
int numthreads = integer.parseint(args[1]);
// 生成线程池
threadpool threadpool = new threadpool(numthreads);
// 运行任务
for (int i=0; i
threadpool.runtask(createtask(i));
}
// 关闭线程池并等待所有任务完成
threadpool.join();
}
/**
一个简单的任务(打印id)
*/
private static runnable createtask(final int taskid) {
return new runnable() {
public void run() {
system.out.println("task " + taskid + ": start");
// 增加耗时
try {
thread.sleep(500);
}
catch (interruptedexception ex) { }
system.out.println("task " + taskid + ": end");
}
};
}
}
******************************************************
这样的线程池可以在许多地方应用!
java线程池游戏代码,Java游戏起步:(一)线程与线程池-JSP教程,Java技巧及代码...相关推荐
- java指定sql生成xml,用Java实现可保存状态的数据库生成XML树(8)-JSP教程,Java与XML...
4.ejb-jar.xml文件 //sun microsystems, inc.//dtd enterprise javabeans 1.1//en http://java.sun.com/j2ee/ ...
- java源代码连接jsp,java网络五子棋的源代码-JSP教程,Java技巧及代码
下面的源代码分为4个文件: chessclient.java:客户端主程序. chessinterface.java:客户端的界面. chesspad.java:棋盘的绘制. chessserver. ...
- java程序获取外部java程序的控件,将 Java 小程序迁移到 Microsoft J# 浏览器控件-JSP教程,Java技巧及代码...
visual j# .net 小组 microsoft corporation 摘要:通过 microsoft j# 浏览器控件,开发人员可以将所编写的在 java 虚拟机上运行的 java 小程序迁 ...
- java基础学不会,转:《学不会的JAVA,消不了的忧愁》之四-JSP教程,Java基础
<学不会的java,消不了的忧愁>之四--献给那些酷爱计算机编程的人们 发言者:jigenghua 时 间:2001/03/12 23:01:47 来 自:www.javaunion.or ...
- java获取jsp 组件,利用Observer模式解决组件间通信问题-JSP教程,Java技巧及代码
1. 问题的提出 以前做一个界面的时候常常会遇到这样的尴尬情况:希望保留各个独立的组件(类),但又希望它们之间能够相互通信.譬如windows中的explorer,我们希望鼠标点击左边是树型目录的一个 ...
- java inner class,C# Inner Class vs. java 的inner class比较-JSP教程,Java技巧及代码
作者: leafwiz www.aspcool.com 时间:2004-11-6 15:50:57 阅读次数:1811 今天朋友问到,为什么在c#中inner class不能够访问外部类的非静态成员, ...
- 用java写四则混合运算,JAVA写的四则混合运算-JSP教程,Java技巧及代码
这是一个四则混合运算程序,没什么做优化,也没做什么注释,(人啊,总喜欢偷懒的.) 这个版本我已经定为了2.21版本.呵呵. 从最先的1.0到2.0的改动很大.除了运算思想没动处,其它的都在2.0做了重 ...
- jsp里加java代码,利用静态内部类为您的代码添加辅助功能-JSP教程,Java技巧及代码...
利用静态内部类为您的代码添加辅助功能 作者 john d. mitchell 摘要这个技巧提供了一个实例,它可以利用静态内部类为您的类添加独立的.可选的辅助功能,例如测试和示例代码等.( 500 字) ...
- java 工具箱安装方法,Java工具包的安装配置和使用-JSP教程,Java技巧及代码
1.下载j2sdk 1.4.1或更高版本 (http://java.sun.com,建议同时下载其java documentation,这是java帮助文档) 2.运行刚刚下载的j2sdk-1_4_1 ...
最新文章
- centos 部署spring boot应用
- 数据分析基于朴素贝叶斯的书籍评价信息分类
- 第四:Pytest框架之命令行参数(二)
- Unity5 Survival Shooter开发笔记(1)
- MRP里如何预测lead time :Approaches for the Prediction of Lead Times in an Engineer to Order Environment
- 计算机里的文件弄不到桌面怎么办,电脑文件夹在桌面不显示怎么办
- Ctrl、Alt、Shift常用的电脑快捷键大全(收藏级)
- iap如何初始化_STM32F4-IAP学习笔记(一)
- 阿里巴巴icon font导入CSS
- Python ln_LN型芯型联轴器
- MyEcplise_Maven搭建SSM框架
- 诺基亚 Lumia 920T 今日发布 处理器升级
- 简单分布式锁实现(拍黄片)
- matlab毕达哥拉斯质数,如何求毕达哥拉斯质数对应的两个数字
- Gradle-Eclipse插件安装
- 入门编程指南:如何从零开始学习编程?
- 高并发系统限流最佳实践
- TP4056电池(BAT)引脚输出高电平
- 【JS中scrollHeight/Width详解(不加定位的情况下)】
- HTML 前端 flex宫格布局