2011-03-10 88 views
1

我做的多線程處理產生一些產品......我將創建每10個minutes..i有2個線程的產品..第一個線程將每隔10分鐘喚醒...... 第二個線程將生成的產品... 問題是在第二個線程中...因爲在第二個線程中,我將生成一些產品文件(由字節創建的文件,所有文件大小將爲30或50 MB)。創建產品文件後,產品將根據在這些產品文件上。產品文件每10分鐘創建一次(它應該每10分鐘創建一次)..但是花費超過10分鐘的時間來創建這些產品文件...所以任何人都可以告訴我如何創建文件非常快?如何將特定線程快速處理爲多線程java?

public class Scheduler implements Runnable{ 
    Thread firstThread; 
    public Scheduler() { 
     firstThread = new Thread(this,"timer"); 
    } 
    public void run() { 

     do { 
      if(wakeUptime) {//if wake up 10.00 correct time 
       secondThread(wakeUptime); 
       sleep(10mins); 
      } else { 
       // calculate next round of next ten mins... 
       // if this process starts at 10.05A.M , 
       // it will sleep 5 mins 
       // (round of time in 10 minutes(10minutes - 5 mins)) 
       // so sleep(5 mins) 
      } 

     } while(true); 

    } 

    secondThread(final string time) { 
     Runnable r = new Runnable() { 
      firstFunction(time); 
      secondFunction(time); 
     }; 
     Thread t = new Thread(r); 
     try { 
      t.start(); 
      t.join;//its getting very slow..how to make fast... 
     } catch(Exception e) { 
     } 

    } 

    firstFunction(String time) { 

     // Here, files will be created every 10 minutes 
     // total files size 40 or 50 mb... 
     // files created by using bytes. 
     // the problem is creating files taking more than 10 minutes... 
     // so is there any method to create files very fast? 

    } 

    secondFunction(String time) { 
     // generate product 
    } 

} 
在第一種方法

,該文件將created..the文件大小將是40或50 MB ......所以其服用大量的時間來創建文件...文件被創建不止10分鐘...有沒有什麼方法可以非常快地創建文件?

+3

請格式化您的代碼,我們可以閱讀它。不要把「......」放在任何地方,這很煩人。 – skaffman 2011-03-10 13:16:40

+0

我格式化代碼,但糾正英語會帶我永遠地,我讓到OP做... – krtek 2011-03-10 13:19:15

+0

有什麼特別的原因'java.util.Timer'是沒有良好的問題了嗎?雖然,說實話,我不清楚你的問題是什麼。 – 2011-03-10 13:25:52

回答

0

首先,我建議使用來自Terracota的電力生產準備sheduler - Quartz,他有一個觸發系統,您可以在其中定義失火行爲。其次,當然是優化你的代碼,你創建productrs文件 - 有世界沒有奇蹟,如果你cat't的功能創建的源數據,你不能運行你正確的結果函數

0

你說「的文件通過使用字節創建「 - 您是否一次向文件寫入一個字節?你有沒有把FileOutputStream包裹在BufferedOutput流中?這樣做可能會有一個數量級或更多的改進。

如果你正在使用Java 5或更高版本,可以使用ScheduledExecutor運行第二個線程。這可能比自己重新實現更可靠。

+0

你可以給我一個ScheduledExecutor的小例子嗎?我已經通過谷歌..但我dint得到的想法/ ... – Sri 2011-03-10 18:54:07