java future spring异步获取线程名称

时间:2017-09-25 06:46:46

标签: java spring multithreading asynchronous

我有一个Spring @Async方法,它返回Future对象。我做了一个异常处理程序和一些日志记录当我检查日志时,我看到错误和堆栈跟踪,但看不到线程名称(只是提到的主线程名称),异常发生的地方。是否有可能从Future对象获取线程名称,以使日志清楚地说明哪个线程确实发生了失败?

我只看到一个解决方法:在我的@Async方法中创建try catch块并从中进行记录。虽然我认为可以从Future对象获取线程名称吗?

在我的主线程中,我等待完成任务:

    for (Future<SearchRequest> future:futureList){
        try {
            SearchRequest searchRequest = future.get();
            doneSearchRequests+=1;
            log.info("Progress: "+doneSearchRequests+
                    " search requests done of "+ searchRequestsNumber+ 
                    " ("+Math.round(100*doneSearchRequests/searchRequestsNumber)+"%)");
        } catch (InterruptedException e) {
            log.warn("Error while wait catalogPageService result. ",e);
        } catch (ExecutionException e) {
            log.warn("Error while wait catalogPageService result. ",e);
        }
    }

futureList 包含异步方法调用结果

的集合

这里是日志记录样本。提到的主线程名称,但没有关于执行器线程名称的信息,其中发生此异常:

2017-09-23 23:37:19.711  WARN 7986 --- [           main] h.service.salary.location.CatalogImpl    : Error while wait catalogPageService result.

0 个答案:

没有答案