cod*_*der 6 java multithreading
我是Java编程的新手.我有一个用例,我必须并行执行2个db查询.我班级的结构是这样的:
class A {
public Object func_1() {
//executes db query1
}
public Object func_2() {
//executes db query1
}
}
Run Code Online (Sandbox Code Playgroud)
现在我在同一个类中添加另一个函数func_3,它调用这两个函数,但也确保它们并行执行.为此,我正在使用callables和期货.这是以这种方式使用它的正确方法吗?我将此变量存储在临时变量中,然后使用它来调用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
}
}
Run Code Online (Sandbox Code Playgroud)
首先,你不需要这些信息存储在另一个局部变量:外功能将提供同样func_1()或func_2()当你想获得this外部类的你只需要使用A.this.
其次,是的,这是常见的做法.此外,如果您要经常调用func_3 - 避免创建固定的线程池,您应该将其作为params传递,因为线程创建相当"昂贵".
| 归档时间: |
|
| 查看次数: |
1188 次 |
| 最近记录: |