有一个文件转换的程序,转换大的word文档比较慢,1分钟之后,不管有没有转换完成,开启一个新线程,开始转换下一个文件,应该怎么写。
2 回答
泛舟湖上清波郎朗
TA贡献1818条经验 获得超3个赞
首先把转换文件的代码封装成一个类或者方法;
然后用定时器或者线程休眠执行;
参考实现:
public void transform(File file){
//转换文件
}
public void execute(File[] files){
for(File file: files){
new Thread(){
public void run(){
transform(file);
}
}.start();
Thread.sleep(1000*60);
}
}具体参数和返回结果,自己调整
代码未编译,参考一下结构
慕仙森
TA贡献1827条经验 获得超8个赞
创建一个线程任务。这个任务的作用是提交一个具体操作任务(即你的转换动作)到线程池(或者你启一个线程去处理)。然后再用线程池的定时任务机制去触发创建任务。这样就能达到每1分钟创建一个转换任务且不受转换进度影响的目的了。
final ScheduledExecutorService service = Executors.newScheduledThreadPool(10); // 线程池
// 转换任务
final Runnable convertRun = new Runnable() {
@Override
public void run() {
// 具体的转换代码
}
};
// 提交任务
Runnable createRun = new Runnable() {
@Override
public void run() {
service.submit(convertRun);
// 或者 new Thread(convertRun).start();// 不推荐这种
}
};
// 这个方法更适合你的需求。但是如果用scheduleWithFixedDelay也是可以的。因为提交一个线程并不会花费多少时间
service.scheduleAtFixedRate(createRun, 0, 1, TimeUnit.MINUTES);// 周期提交添加回答
举报
0/150
提交
取消
