我是Java編程新手。我有一個用例,我必須並行執行2個db查詢。我班的結構是這樣的:java中的多線程最佳實踐
class A {
public Object func_1() {
//executes db query1
}
public Object func_2() {
//executes db query1
}
}
現在我在它調用這兩個函數相同的類添加另一個功能func_3而且還可以確保它們執行平行。爲此,我正在使用可卡因和期貨。以這種方式使用它是否正確?我將這個變量存儲在一個臨時變量中,然後使用它從func_3調用func_1和func_2(我不確定是否是正確的方法)。還是有任何其他方式來處理這類案件?
class A {
public Object func_1() {
//executes db query1
}
public Object func_2() {
//executes db query1
}
public void func_3() {
final A that = this;
Callable call1 = new Callable() {
@Override
public Object call() {
return that.func_1();
}
}
Callable call2 = new Callable() {
@Override
public Object call() {
return that.func_2();
}
}
ArrayList<Callable<Object>> list = new ArrayList<Callable<Object>>();
list.add(call1);
list.add(call2);
ExecutorService executor = Executors.newFixedThreadPool(2);
ArrayList<Future<Object>> futureList = new ArrayList<Future<Object>>();
futureList = (ArrayList<Future<Object>>) executor.invokeAll(list);
//process result accordingly
}
}
「我是Java編程新手」= false :) – 2012-12-27 17:01:52
我認爲沒關係。但是,您必須同時注意'func_1'和'func_2'中使用的共享屬性。 –
http://www.javaconcurrencyinpractice.com/? – fge