仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1878|回复: 19

[学习教程] JAVA网站制作之Java游戏起步:(一)线程与线程池

[复制链接]
柔情似水 该用户已被删除
发表于 2015-1-18 11:42:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Oracle收购Sun后Java前途未卜。任何游戏都最少必要运转两个线程,主线程和GUI线程
而线程池是一个办理运转线程的有效工具,上面的代码树模了一个线程池的完成办法~~
************************************************
(ThreadPool.java)
importjava.util.LinkedList;

/**
线程池是一组线程,限定实行义务的线程数
*/
publicclassThreadPoolextendsThreadGroup{

privatebooleanisAlive;
privateLinkedListtaskQueue;
privateintthreadID;
privatestaticintthreadPoolID;

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

isAlive=true;

taskQueue=newLinkedList();
for(inti=0;i<numThreads;i++){
newPooledThread().start();
}
}
/**
哀求新义务。人物在池中下一余暇线程中运转,义务按收到的按次实行
*/
publicsynchronizedvoidrunTask(Runnabletask){
if(!isAlive){
thrownewIllegalStateException();//线程被关则抛出IllegalStateException非常
}
if(task!=null){
taskQueue.add(task);
notify();
}

}


protectedsynchronizedRunnablegetTask()
throwsInterruptedException
{
while(taskQueue.size()==0){
if(!isAlive){
returnnull;
}
wait();
}
return(Runnable)taskQueue.removeFirst();
}


/**
封闭线程池,一切线程中断,不再实行义务
*/
publicsynchronizedvoidclose(){
if(isAlive){
isAlive=false;
taskQueue.clear();
interrupt();
}
}


/**
封闭线程池并守候一切线程完成,实行守候的义务
*/
publicvoidjoin(){
//告知守候线程线程池已关
synchronized(this){
isAlive=false;
notifyAll();
}

//守候一切线程完成
Thread[]threads=newThread[activeCount()];
intcount=enumerate(threads);
for(inti=0;i<count;i++){
try{
threads[i].join();
}
catch(InterruptedExceptionex){}
}
}


/**
用于举行义务的线程
*/
privateclassPooledThreadextendsThread{


publicPooledThread(){
super(ThreadPool.this,
"PooledThread-"+(threadID++));
}


publicvoidrun(){
while(!isInterrupted()){

//失掉义务
Runnabletask=null;
try{
task=getTask();
}
catch(InterruptedExceptionex){}

//若getTask()前往null或中止,则封闭此线程并前往
if(task==null){
return;
}

//运转义务,吸取非常
try{
task.run();
}
catch(Throwablet){
uncaughtException(this,t);
}
}
}
}
}
*********************************************
要测试这个线程池,能够经由过程上面这个Test程序!
*********************************************
(ThreadPoolTest.java)
publicclassThreadPoolTest{

publicstaticvoidmain(String[]args){
if(args.length!=2){
System.out.println("TeststheThreadPooltask.");
System.out.println(
"Usage:javaThreadPoolTestnumTasksnumThreads");
System.out.println(
"numTasks-integer:numberoftasktorun.");
System.out.println(
"numThreads-integer:numberofthreads"+
"inthethreadpool.");
return;
}
intnumTasks=Integer.parseInt(args[0]);
intnumThreads=Integer.parseInt(args[1]);

//天生线程池
ThreadPoolthreadPool=newThreadPool(numThreads);

//运转义务
for(inti=0;i<numTasks;i++){
threadPool.runTask(createTask(i));
}

//封闭线程池并守候一切义务完成
threadPool.join();
}


/**
一个复杂的义务(打印ID)
*/
privatestaticRunnablecreateTask(finalinttaskID){
returnnewRunnable(){
publicvoidrun(){
System.out.println("Task"+taskID+":start");

//增添耗时
try{
Thread.sleep(500);
}
catch(InterruptedExceptionex){}

System.out.println("Task"+taskID+":end");
}
};
}

}
******************************************************
如许的线程池能够在很多中央使用!



由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,
分手快乐 该用户已被删除
发表于 2015-1-21 13:01:17 | 显示全部楼层
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
简单生活 该用户已被删除
发表于 2015-1-30 18:50:29 | 显示全部楼层
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
飘飘悠悠 该用户已被删除
发表于 2015-2-6 15:03:07 | 显示全部楼层
是一种为 Internet发展的计算机语言
不帅 该用户已被删除
发表于 2015-2-9 22:21:38 | 显示全部楼层
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
若相依 该用户已被删除
发表于 2015-2-13 11:00:43 | 显示全部楼层
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
只想知道 该用户已被删除
发表于 2015-3-3 20:08:08 | 显示全部楼层
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
小魔女 该用户已被删除
发表于 2015-3-11 13:01:28 | 显示全部楼层
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
柔情似水 该用户已被删除
 楼主| 发表于 2015-3-17 05:10:31 | 显示全部楼层
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
因胸联盟 该用户已被删除
发表于 2015-3-24 03:24:23 | 显示全部楼层
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
老尸 该用户已被删除
发表于 2015-4-2 11:33:57 | 显示全部楼层
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
活着的死人 该用户已被删除
发表于 2015-4-13 16:34:46 | 显示全部楼层
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
小妖女 该用户已被删除
发表于 2015-4-16 22:09:11 | 显示全部楼层
Java 编程语言的风格十分接近C、C++语言。
海妖 该用户已被删除
发表于 2015-4-30 01:52:20 | 显示全部楼层
Java 编程语言的风格十分接近C、C++语言。
乐观 该用户已被删除
发表于 2015-5-2 20:30:44 | 显示全部楼层
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
透明 该用户已被删除
发表于 2015-5-6 03:10:02 | 显示全部楼层
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
冷月葬花魂 该用户已被删除
发表于 2015-5-8 02:28:26 | 显示全部楼层
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
愤怒的大鸟 该用户已被删除
发表于 2015-6-12 23:15:11 | 显示全部楼层
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
兰色精灵 该用户已被删除
发表于 2015-7-8 03:47:30 | 显示全部楼层
Java是一种计算机编程语言,拥有跨平台、面向对java
蒙在股里 该用户已被删除
发表于 2015-7-12 07:27:56 | 显示全部楼层
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-18 11:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表