线程池调整真的很重要-java开发java经验技巧

线程池调整真的很重要-java开发java经验技巧

ID:30920655

大小:72.00 KB

页数:9页

时间:2019-01-04

线程池调整真的很重要-java开发java经验技巧_第1页
线程池调整真的很重要-java开发java经验技巧_第2页
线程池调整真的很重要-java开发java经验技巧_第3页
线程池调整真的很重要-java开发java经验技巧_第4页
线程池调整真的很重要-java开发java经验技巧_第5页
资源描述:

《线程池调整真的很重要-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、线程池调整真的很重要-编程开发技术线程池调整真的很重要木文由ImportNew-justyoung翻译自blog.bramp.neto欢迎加入翻译小组。转载请见文末要求。知道吗,你的Javaweb应用其实是使用线程池來处理请求的。这一实现细节被许多人忽略,但是你迟早都需要理解线程池如何使用,以及如何正确地根据应用调整线程池配置。这篇文章的目的是为了解释线程模型——什么是线程池、以及怎样正确地配置线程池。单线程模型让我们从一些基础的线程模型开始,然后再随着线程模型的演变进行更深一步的学习。你使用的任何

2、应用服务器或框架,如Tomcat、Dropwizard>Jetty等,它们的基木原理其实是相同的。Web服务器的最底层实际上是一个socketo这个socket监听并接受到达的TCP连接。一旦一个连接被建立,就可以通过这个新建立的连接读取、解析信息,然后将这些信息包装成一个IITTP请求。这个I1TTP请求还将被移交至web应用程序,来完成请求的动作。我们将通过一个简单的服务器程序来展示线程在其中所起到的作用。这个服务器程序展示了大部分应用服务器的底层实现细节。让我们以一个简单•的单•线程web服务

3、器程序开始,它的代码像下面这样:ScrvcrSockctlistcncr=newScrvcrSockct(8080);try{while(true){Socketsocket二1istener.accept();try{handlcRcqucst(socket);}catch(lOExceptione){e.printStackTrace();}}}finally{listener.close();}这段代码在8080端口上创建了一个ServerSocket,紧接着通过循环來监听和接受新到达的连接。

4、一旦连接建立,会将socket传递给handleRequest方法。这个方法可能会读取该IITTP请求,处理这个请求,然后写回一个响应。在这个简单的例子屮,handleRequest方法从socket屮读取简单的一行数据,然后返回一个简短的HTTP响应。但是,handleRequest冇可能需要处理一些更复杂的任务,例如读数据库或者执行其它一些10操作。finalstaticStringresponse-"IITTP/l.02000Krn〃+"Content-type:text/plainrnz,+

5、〃〃rn+“HelloWorldrn,z;publicstaticvoidhandleRequest(Socketsocket)throwsIOException{//Readtheinputstream,andreturn〃2000K〃try{BufferedReaderin二newBufferedReader(newInputStreamReader(socket,getlnputStream()));log.info(in.readLineO);OutputStreamout二socket.g

6、etOutputStream();out.write(response.getBytes(StandardCharsets.UTF_8));}fineilly{socket.closeO;}}因为只有一个线程处理所有的socket,因此只有在完全处理好一个请求后,才能再接受下一个请求。在实际的应用中,handleRequest方法口J能需要经过100毫秒才能返回,那么这个服务器程序在一秒中,只能按顺序处理10个请求。多线程模型尽管handleRequesI可能会被10操作阻塞,CPU却可能是空闲的,

7、它可以处理其它更多请求,但这对单线程模型來说是不能实现的。I大I此,通过创建多个线程,可以使服务器程序实现并发操作:publicstaticclassHandleRequestRurrnableimplementsRurrnable{finalSocketsocket;publicHandleRequestRurrnable(Socketsocket){this.socket二socket;}publicvoidrun(){try{handleRequest(socket);}catch(IOExc

8、eptione){e.printStackTrace();}}}//MainloophereServerSocket1istener二newServerSocket(8080);try{while(true){Socketsocket=listener.accept。;newThread(newHandleRequestRunnable(socket)).start();}}finally{listenet,close();}上面这段代码中,accept0方法仍然是在

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。