java多线程技术关于在线图片上传探究

java多线程技术关于在线图片上传探究

ID:31675993

大小:55.67 KB

页数:7页

时间:2019-01-17

java多线程技术关于在线图片上传探究_第1页
java多线程技术关于在线图片上传探究_第2页
java多线程技术关于在线图片上传探究_第3页
java多线程技术关于在线图片上传探究_第4页
java多线程技术关于在线图片上传探究_第5页
资源描述:

《java多线程技术关于在线图片上传探究》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java多线程技术关于在线图片上传探究【摘要】多线程技术能够使应用程序并行执行,提高CPU利用率,容易实现网络上的实时交互行为。本文分析了java的多线程机制,介绍了在网络上传文件中运用java多线程机制实现对图片上传的加速。【关键词】java多线程;Servlet;图片上传1.java的多线程机制首先多线程是相对于单线程而言的,指的是在一个程序中可以定义多个线程并同时运行它们,每个线程可以执行不同的任务。与进程不同的是,同类多线程共享一块内存空间和一组系统资源,所以,系统创建多线程花费单价较小。因此,也称

2、线程为轻负荷进程。很多计算机编程语言需要外部软件包来实现多线程,而java语言则内在支持多线程,所有的类都是在多线程思想下定义的,使用java的多线程机制编程可将程序的任务分解为几个并行的子任务,通过县城的并发执行来加速程序运行,提高CPU的利用率[1]。例如:在网络编程中,有很多功能可以并发执行。网络传输速度一般较慢,用户输入速度也较慢,因此可以设计两个独立线程分别完成这两个任务而不影响正常的显示或其他功能。2.多线程的图片上传技术由于用户上传图片时是把批量的图片数据传到主服务,然后由主服务器连接文件上传

3、服务器的Servlet,把图片数据传递给该Servlet,由它调用图片压缩方法,压缩、写入图片。由于压缩和I/O操作都是比较占用时间的操作,如果采用串行的方式必然影响系统的响应速度,而采用多线程技术,使所有图片的压缩和I/O并发进行就可以大大提升系统的响应时间。考虑到Servlet是以多线程方式运行的,故而只需要在主服务端也以多线性方式把单张图片的请求发送给文件服务器的Servlet即可,然后等待所有线程执行完,把执行结果回调,即可通过判断对调的结果就可以判断每张图片的上传操作是否成功,以此为标准决定往数据

4、库写入哪些数据。具体的实现方式如下:首先,创建创建线程池,池中的线程数一般由系统核心数决定。privatestaticExecutorServiceimageService=Executors.newFixedThreadPoo1(3);然后,创建一个任务队列,其中每张图片的一次上传都是队列中的一个任务。List>callableList=newArrayList>();for(UploadFilefile:files){callableList.add(newUploadRequestSender(url

5、,file));}最后,等待所有上传结果(返回码)出来后,根据图结果决定数据库的操作。try{List>futures=imageServiceinvokeAll(callableList);for(inti二0;i{privateURLservletUrl;privateUploadFilefile;publicUploadRequestSender(URLservletUrl,UploadFilefile){this.servletUrl=servletUrl;this.f订e二f订e;}private

6、intsendlmageToServlet()throwsIOException{HttpURLConnectionconnection二(HttpURLConnection)servletUrl.openConnection();connection.setDoOutput(true);connection.setDolnput(true);connection.setRequestProperty(”Content-Type”,”application/octet-stream^);connection

7、.setRequestMethod(”POST");connection.setRequestProperty(”shortPath”,file.getShortPath());OutputStreamos二connection.getOutputStream();os.write(file.getFileData());System・out・printin(connection.getContentType()+”:”+connection.getResponseCode());os.close();re

8、turnconnection.getResponseCode();}publicIntegercall()throwsException{returnsendlmageToServlet();}}1.总结其中,call()方法即线程所要执行的操作,而返回值即操作执行的结果,也即前面futures中与该应任务相应的节点值。而在上传服务器端,由于Servlet对于每个请求都会通过一个线程来响应该请求,故而也会以多线程

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

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

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