线程在实际项目中简单的应用

来源:互联网 发布:台风如何命名 知乎 编辑:程序博客网 时间: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
原创粉丝点击