在这里,我想打电话给n
线程和执行我的功能padrDao.saveGuidanceDetails(sgd)
是在进行插入操作的DAO方法,并返回一个long值如下图所示的代码。
使用林可赎回,但它要求我回去一定的价值,但我不熟悉线程使用Runnable
同样的工作。可有人请验证码是否是正确的或做任何修改?我觉得代码是错误的,因为里面有调用return语句,这将需要我的第一个任务本身的主要方法之外。
int totalThreadsNeeded=listForguidanceItems.size();
ExecutorService executor = Executors.newFixedThreadPool(totalThreadsNeeded);
List<Callable<Void>> runnableTasks = new ArrayList<>();
final PriceLineItemsResultExt response1=response;
for(final ProductLineItemResultExt item: listForguidanceItems)
{
int counter=0;
final SavedGuidanceDetailsDto sgd=list.get(counter);
Callable<Void> task1 = new Callable() {
public Void call() {
if (sgd.hasGuidance())
{
if (response1.isSaveGuidance()) {
long guidanceDetailsId = padrDao.saveGuidanceDetails(sgd);
item.setGuidanceDetailsId(String.valueOf(guidanceDetailsId));
}
}
return null;
}};
counter++;
runnableTasks.add(task1);
}
try {
executor.invokeAll(runnableTasks);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
logger.info("Thread fail exception " + e);
}
executor.shutdown();
PLS建议我用正确的代码修改?提前致谢
要使用Runnable接口,你可以简单地更换这些:
Callable<Void> task1 = new Callable() {
public Void call() {
...
同
Runnable task1 = new Runnable {
public void run() {
...
而且随着运行的,你就不会返回任何东西。
当然,你还就需要修改runnableTasks
是一个List<Runnable>
如果TOU仍希望将这些存储在一个集合(可能不是),也改变你提交他们在ExecutorService的结合的方式:
executor.submit(your_Runnable_object)