仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1577|回复: 19
打印 上一主题 下一主题

[学习教程] 发布一篇100行Java代码构建一个线程池

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:33:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
你对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应用开发和移动应用开发。
小女巫 该用户已被删除
5#
发表于 2015-2-16 06:48:48 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
分手快乐 该用户已被删除
6#
发表于 2015-2-19 04:35:57 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
谁可相欹 该用户已被删除
7#
发表于 2015-3-6 13:01:40 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-8 11:31:46 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
活着的死人 该用户已被删除
9#
发表于 2015-3-10 04:04:29 | 只看该作者
是一种突破用户端机器环境和CPU
第二个灵魂 该用户已被删除
10#
发表于 2015-3-10 19:56:52 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
简单生活 该用户已被删除
11#
发表于 2015-3-17 09:22:53 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
若相依 该用户已被删除
12#
发表于 2015-3-17 16:10:31 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
冷月葬花魂 该用户已被删除
13#
发表于 2015-3-19 03:38:43 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
因胸联盟 该用户已被删除
14#
发表于 2015-3-21 12:58:52 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
蒙在股里 该用户已被删除
15#
发表于 2015-3-30 04:31:18 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
变相怪杰 该用户已被删除
16#
发表于 2015-4-6 17:33:59 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
柔情似水 该用户已被删除
17#
发表于 2015-4-10 15:02:08 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
admin 该用户已被删除
18#
发表于 2015-4-20 21:31:32 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
小妖女 该用户已被删除
19#
发表于 2015-4-21 20:12:58 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
小魔女 该用户已被删除
20#
发表于 2015-5-4 16:33:37 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 02:19

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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