线程在实际项目中简单的应用
来源:互联网 发布:台风如何命名 知乎 编辑:程序博客网 时间:2024/05/17 17:40
前段时间开发的项目中有一个office在线预览的功能,我们知道需要实现这个功能一般是
后台把用户上传的txt啊excel啊word啊先转换成pdf格式,然后使用pdf.js进行前台预览(有的还
需要转换成swf文件),功能倒是实现了,只是客户反馈提交表单的时候速度比较慢,我试了一下
,确实比较慢,大概好几十秒,这个有点无法忍受,所以后台转pdf的那个过程就将其使用线程,
以异步方式去处理。原理就和如下类似
不使用线程:
package thread;public class SleepTest {public static void main(String[] args) throws Exception {System.out.println("begin");Thread.sleep(5000);//模拟业务场景System.out.println("end");}}
例子很简单,控制台输出begin并且在五秒后打印end
使用线程
package thread;public class SleepTest {public static void main(String[] args) throws Exception {System.out.println("begin");new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(5000);//模拟业务场景} catch (InterruptedException e) {e.printStackTrace();}}}).start();System.out.println("end");}}
效果,执行后控制台立刻显示begin和end
因为目前我们不需要中间处理的结果,因此可以让它在后台执行,不阻塞主线程。
另外,也可以使用线程池实现上面的功能,代码如下:
package thread;import java.util.concurrent.Executors;public class SleepTest {public static void main(String[] args) throws Exception {System.out.println("begin");Executors.newSingleThreadExecutor().submit(new Runnable() {@Overridepublic void run() {try {Thread.sleep(5000);// 模拟业务场景} catch (InterruptedException e) {e.printStackTrace();}}});System.out.println("end");}}
结合实际项目中转pdf的例子
代码如下:
package org.framework.core.extend.swftools;import org.framework.core.util.FileUtils;/** * 文件转换调用接口 * * @author mosesframe * */public class SwfToolsUtil {public static void convert2SWF(final String inputFile) {new Thread("文件转化服务") {public void run() {String extend = FileUtils.getExtend(inputFile);PDFConverter pdfConverter = new OpenOfficePDFConverter();SWFConverter swfConverter = new SWFToolsSWFConverter();if (extend.equals("pdf")) {// swfConverter.convert2SWF(inputFile,extend);// 该项目这里注释掉,前台预览使用了pdf.js,因此不需要转换成swf文件了,避免浪费更多的时间}if (extend.equals("doc") || extend.equals("docx")|| extend.equals("xls") || extend.equals("pptx")|| extend.equals("xlsx") || extend.equals("ppt")|| extend.equals("txt") || extend.equals("odt")) {DocConverter converter = new DocConverter(pdfConverter,swfConverter);converter.convert(inputFile, extend);}}}.start();}}
阅读全文
0 0
- 线程在实际项目中简单的应用
- IOCP在实际项目中应用的小技巧
- 在java项目的实际开发和应用中
- 元数据在实际项目的应用
- 项目中sharding-jdbc的实际应用
- (7)java5线程并发库的应用(线程池) 以及在实际项目中的使用。。
- DWR在实际项目中的应用以及在调试过程中遇到的问题
- 实际springMVC项目中自定义异常、spring事务与异常的简单应用
- 在项目的实际开发中,dao层java泛型的的应用(ssh)
- 实际工作中:----FastDFS在项目中的应用
- Agile software development(敏捷开发)在实际项目中应用的一些认识
- Makefile 在实际项目中(chiplevel CPM)的应用- build-test
- Makefile 在实际项目中(chiplevel CPM)的应用 build-lib
- 关于OC中消息转发机制的理解以及在项目中的实际应用
- 关于OC中消息转发机制的理解以及在项目中的实际应用
- Json实际项目中应用
- BigDecimal在实际项目的应用及遇到的问题
- maven分模块,聚合 在实际项目里面的应用
- 初识软件架构
- bootstraptable 分页查询 及 条件查询
- 资源|5本深度学习和10本机器学习书籍(免费下载)
- Linux secure boot(安全启动)时添加Nvidia显卡驱动
- Android设置Genymotion 运行ARM架构程序
- 线程在实际项目中简单的应用
- 有1,2,3,4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
- JavaScript进阶-js滚动
- IOS-通过StortBoard设置Button点击效果
- 推荐财务、HR必看的【出差租房分析】,能为公司节省巨额差旅费!
- 什么是web应用程序
- Java中IDEA(Eclipse)远程调试
- 文章标题
- ZooKeeper异常之无法找到myid文件。