Tôi mới làm quen với lập trình Java. Tôi có một trường hợp sử dụng, nơi tôi phải thực hiện 2 db truy vấn song song. Cấu trúc lớp học của tôi giống như sau:Thực hành tốt nhất đa luồng trong java
class A {
public Object func_1() {
//executes db query1
}
public Object func_2() {
//executes db query1
}
}
Bây giờ tôi có thêm hàm khác func_3 trong cùng một lớp gọi 2 hàm này nhưng cũng đảm bảo rằng chúng thực thi song song. Vì điều này, tôi đang sử dụng các cuộc gọi và tương lai. Có đúng cách để sử dụng nó theo cách này không? Tôi đang lưu trữ biến này trong một biến tạm thời và sau đó sử dụng biến này để gọi func_1 và func_2 từ func_3 (mà tôi không chắc chắn là cách tiếp cận chính xác). Hay có cách nào khác để xử lý các trường hợp như thế này?
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
}
}
"Tôi là người mới lập trình Java" = false :) –
Tôi nghĩ điều đó là ổn. Nhưng bạn phải cẩn thận về các thuộc tính được chia sẻ được sử dụng trong 'func_1' và' func_2' đồng thời. –
http://www.javaconcurrencyinpractice.com/? – fge