2012-02-16 54 views
0

我正在編寫一個使用Java的彩虹表生成器,現在已經到了實現多線程的時間來提高整個流程的速度。Java可運行的大量任務彩虹表

到目前爲止,我有一個GUI,它調用一個SwingWorker類來處理表格構造和數據填充。

內的SwingWorker是一個Runnable:

private final Runnable populateTable = new Runnable() { //Generate & write to file}; 

爲了調用populateTable我實現了包含4個線程做的產生和寫入磁盤FixedThreadPool一個ExecutorService的run()方法也是同步的:

ExecutorService executor = Executors.newFixedThreadPool(4); 

這是我變得有點困惑的地方,並且在多線程時表現出我的無知。

每個populateTable run()在最後寫入文件之前執行2000次操作。

populateTable需要運行40,000,000,以便生成足夠大的彩虹表供我使用。

運行2000次操作的最佳(當然是有效的)方法是什麼?使用四個線程執行4000萬次操作?

我希望這是有道理的,任何意見或建議將不勝感激。

感謝

喬希

回答

1

一個線程池4000萬次執行的東西不可能是有效的。相反,將工作分成4部分,並執行4個可運行子程序,每個子程序計算該部分並以適當的批次清空結果。

1

如果您想在函數計算部分中獲得更高的效率,那麼會產生四個線程,每個線程重複四次。如果你還需要更多的東西,你將不得不忘記Java並去找this