飘灵儿 发表于 2015-1-18 11:33:58

发布一篇100行Java代码构建一个线程池

你对java乐观有点盲目。java的关键就是在服务器上表现优异,而且它提供了整个开发所需要的工具。应该是说,看哪天。net网页编程有没有机会赶上java。
在古代的操纵体系中,有一个很主要的观点DD线程,几近一切今朝盛行的操纵体系都撑持线程,线程来历于操纵体系中历程的观点,历程有本人的假造地点空间和注释段、数据段及仓库,并且各自占据分歧的体系资本(比方文件、情况变量等等)。与此分歧,线程不克不及独自存在,它依靠于历程,只能由历程派生。假如一个历程派生出了两个线程,那这两个线程共享此历程的全局变量和代码段,但每一个线程各具有各自的仓库,因而它们具有各自的部分变量,线程在UNIX体系中还被进一步分为用户级线程(由历程自已来办理)和体系级线程(由操纵体系的调剂程序来办理)。既然有了历程,为何还要提出线程的观点呢?由于与创立一个新的历程比拟,创立一个线程将会泯灭小很多的体系资本,关于一些小型的使用,大概感到不到这点,但关于那些并发历程数出格多的使用,利用线程会比利用历程取得更好的功能,从而下降操纵体系的包袱。别的,线程共享创立它的历程的全局变量,因而线程间的通信编程会更将复杂,完整能够丢弃传统的历程间通信的IPC编程,而接纳共享全局变量来举行线程间通信。
有了下面这个观点,我们上面就进进正题,来看一下线程池事实是怎样一回事?实在线程池的道理很复杂,相似于操纵体系中的缓冲区的观点,它的流程以下:先启动多少数目的线程,并让这些线程都处于就寝形态,当客户端有一个新哀求时,就会叫醒线程池中的某一个就寝线程,让它来处置客户真个这个哀求,当处置完这个哀求后,线程又处于就寝形态。大概你大概会问:为何要弄得这么贫苦,假如每当客户端有新的哀求时,我就创立一个新的线程不就完了?这大概是个不错的办法,由于它能使得你编写代码绝对简单一些,但你却疏忽了一个主要的成绩DD功能!就拿我地点的单元来讲,我的单元是一个省级数据年夜会合的银行收集中央,岑岭期每秒的客户端哀求并发数凌驾100,假如为每一个客户端哀求创立一个新线程的话,那泯灭的CPU工夫和内存将是惊人的,假如接纳一个具有200个线程的线程池,那将会勤俭大批的的体系资本,使得更多的CPU工夫和内存用来处置实践的贸易使用,而不是频仍的线程创立与烧毁。
既然统统都分明了,那我们就入手下手动手完成一个真实的线程池吧,线程编程能够有多种言语来完成,比方C、C++、java等等,但分歧的操纵体系供应分歧的线程API接口,为了让你能更分明线程池的道理而制止堕入啰嗦的API挪用当中,我接纳了JAVA言语来完成它,因为JAVA言语是一种跨平台的言语,因而你不用为利用分歧的操纵体系而没法编译运转本程序而忧?,只需你安装了JDK1.2以上的版本,都能准确地编译运转本程序。别的JAVA言语自己就内置了线程对象,并且JAVA言语是完整面像对象的,因而可以让你更明晰地懂得线程池的道理,假如你注重看一下本文的题目,你会发明全部示例程序的代码只要约莫100行。
本示例程序由三个类组成,第一个是TestThreadPool类,它是一个测试程序,用来摹拟客户真个哀求,当你运转它时,体系起首会显现线程池的初始化信息,然后提醒你从键盘上输出字符串,并按下回车键,这时候你会发明屏幕上显现信息,告知你某个线程正在处置你的哀求,假如你疾速地输出一行行字符串,那末你会发明线程池中不休有线程被叫醒,来处置你的哀求,在本例中,我创立了一个具有10个线程的线程池,假如线程池中没有可用线程了,体系会提醒你响应的告诫信息,但假如你稍等半晌,那你会发明屏幕上会陆连续续提醒有线程进进了就寝形态,这时候你又能够发送新的哀求了。
第二个类是ThreadPoolManager类,望文生义,它是一个用于办理线程池的类,它的次要职责是初始化线程池,并为客户真个哀求分派分歧的线程来举行处置,假如线程池满了,它会对你收回告诫信息。
最初一个类是SimpleThread类,它是Thread类的一个子类,它才真正对客户真个哀求举行处置,SimpleThread在示例程序初始化时都处于就寝形态,但假如它承受到了ThreadPoolManager类发过去的调剂信息,则会将本人叫醒,并对哀求举行处置。
起首我们来看一下TestThreadPool类的源码:
<p>//TestThreadPool.java
1importjava.io.*;
2
3
4publicclassTestThreadPool
5{
6publicstaticvoidmain(String[]args)
7{
8try{
9BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
10Strings;
11ThreadPoolManagermanager=newThreadPoolManager(10);
12while((s=br.readLine())!=null)
13{
14manager.process(s);
15}
16}catch(IOExceptione){}
17}
18}
大型的应用一般不会用这些框架(因为性能考虑);开发人员根据需要选择用一些框架,也可以不选用框架;不用框架并不代表要自己写框架;修改框架的可能性更小。

兰色精灵 发表于 2015-1-21 10:14:19

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

莫相离 发表于 2015-1-30 14:47:12

是一种突破用户端机器环境和CPU

飘灵儿 发表于 2015-2-6 13:26:40

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

小女巫 发表于 2015-2-16 06:48:48

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

分手快乐 发表于 2015-2-19 04:35:57

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

谁可相欹 发表于 2015-3-6 13:01:40

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

飘飘悠悠 发表于 2015-3-8 11:31:46

Java 编程语言的风格十分接近C、C++语言。

活着的死人 发表于 2015-3-10 04:04:29

是一种突破用户端机器环境和CPU

第二个灵魂 发表于 2015-3-10 19:56:52

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

简单生活 发表于 2015-3-17 09:22:53

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

若相依 发表于 2015-3-17 16:10:31

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

冷月葬花魂 发表于 2015-3-19 03:38:43

http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。

因胸联盟 发表于 2015-3-21 12:58:52

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

蒙在股里 发表于 2015-3-30 04:31:18

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

变相怪杰 发表于 2015-4-6 17:33:59

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

柔情似水 发表于 2015-4-10 15:02:08

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

admin 发表于 2015-4-20 21:31:32

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

小妖女 发表于 2015-4-21 20:12:58

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

小魔女 发表于 2015-5-4 16:33:37

让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
页: [1]
查看完整版本: 发布一篇100行Java代码构建一个线程池