我有一個有點慢的應用程序。我很抱歉使用線程可能會更快。線程與列表
所以,這裏是我的計劃:我的程序有X型和每個對象X的整數非常大名單的對象列表(讓我們考慮整數爲簡單起見)。
我有一個從X的名單收到對象X一個靜態方法(稱爲getSubsetOfX),並返回對象X返回的列表中的整數列表是包含在X中的所有整數的一個子集
該方法在列表中包含的每個X都被調用。然後我將返回的列表插入到整數列表的列表中。
這是我在一個緊湊的版本解釋代碼:
// Class of object X
public class X{
public List<Integer> listX;
...
}
// Utility class
public class Util{
// Return a sub-set of Integer contained in X
public static List<Integer> getSubsetOfX(X x){...}
}
public class exec{
public static void main(String args[]){
// Let's suppose that lx is already filled with data!
List<X> lx = new ArrayList<X>();
// List of the subsets of integer
List<List<Integer>> li = new ArrayList<ArrayList<Integer>>();
for(X x : lx){
// I want to turn this step "threadrized"
li.add(getSubsetOfX(x));
}
}
}
我不知道如果列表允許併發插入。我不知道如何在其中應用線程。我讀了一些關於線程的內容,但是,由於run()方法不會返回任何內容,因此如何將方法getSubsetOfX(X x)並行?
你能幫我做這個嗎?
是@David,慢方法是getSubsetOfX(X x)。這個exec.invokeAll()是否運行Callables並行或linnear?謝謝 – marionmaiden 2010-07-06 19:30:02
這取決於你使用哪個'ExecutorService'實現。一般來說,我希望它可以並行地調用它們,直到ExecutorService允許的併發任務數量。例如,如果使用3線程的固定線程池,它應該並行地調用前3個Callables,並且每當它們中的一個完成時,執行它的線程將從列表中獲取下一個Callable。因此,只要有3個或更多任務要運行,總是會有3個任務在任何時間運行。 – 2010-07-06 20:00:46