柔情似水 发表于 2015-1-18 11:42:33

JAVA网站制作之Java游戏起步:(一)线程与线程池

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;
intcount=enumerate(threads);
for(inti=0;i<count;i++){
try{
threads.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);
intnumThreads=Integer.parseInt(args);

//天生线程池
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分离开的设计思想)
页: [1]
查看完整版本: JAVA网站制作之Java游戏起步:(一)线程与线程池