有一個(gè)文件轉(zhuǎn)換的程序,轉(zhuǎn)換大的word文檔比較慢,1分鐘之后,不管有沒(méi)有轉(zhuǎn)換完成,開(kāi)啟一個(gè)新線程,開(kāi)始轉(zhuǎn)換下一個(gè)文件,應(yīng)該怎么寫(xiě)。
2 回答

泛舟湖上清波郎朗
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
首先把轉(zhuǎn)換文件的代碼封裝成一個(gè)類(lèi)或者方法;
然后用定時(shí)器或者線程休眠執(zhí)行;
參考實(shí)現(xiàn):
public void transform(File file){ //轉(zhuǎn)換文件 } public void execute(File[] files){ for(File file: files){ new Thread(){ public void run(){ transform(file); } }.start(); Thread.sleep(1000*60); } }
具體參數(shù)和返回結(jié)果,自己調(diào)整
代碼未編譯,參考一下結(jié)構(gòu)

慕仙森
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
創(chuàng)建一個(gè)線程任務(wù)。這個(gè)任務(wù)的作用是提交一個(gè)具體操作任務(wù)(即你的轉(zhuǎn)換動(dòng)作)到線程池(或者你啟一個(gè)線程去處理)。然后再用線程池的定時(shí)任務(wù)機(jī)制去觸發(fā)創(chuàng)建任務(wù)。這樣就能達(dá)到每1分鐘創(chuàng)建一個(gè)轉(zhuǎn)換任務(wù)且不受轉(zhuǎn)換進(jìn)度影響的目的了。
final ScheduledExecutorService service = Executors.newScheduledThreadPool(10); // 線程池 // 轉(zhuǎn)換任務(wù) final Runnable convertRun = new Runnable() { @Override public void run() { // 具體的轉(zhuǎn)換代碼 } }; // 提交任務(wù) Runnable createRun = new Runnable() { @Override public void run() { service.submit(convertRun); // 或者 new Thread(convertRun).start();// 不推薦這種 } }; // 這個(gè)方法更適合你的需求。但是如果用scheduleWithFixedDelay也是可以的。因?yàn)樘峤灰粋€(gè)線程并不會(huì)花費(fèi)多少時(shí)間 service.scheduleAtFixedRate(createRun, 0, 1, TimeUnit.MINUTES);// 周期提交
添加回答
舉報(bào)
0/150
提交
取消