线程池异步查询数据

17 篇文章 1 订阅

1 异步实体类

@Data
@Builder
public class AsyncEntity {

    //整型数集合
    private List<Integer> integerList;
    //学生集合
    private List<Student> studentList;

}

2 异步获取的代码

@Service
public class TestService {

    
private static ExecutorService executorService = new ThreadPoolExecutor(10,20,1000, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());

public AsyncEntity getAsyncEntity() {

        //1、异步获取整型List
        CompletableFuture<List<Integer>> integerListFuture =
                CompletableFuture.supplyAsync(() -> getInegerList(), executorService);

        //2、异步获取Student的List
        CompletableFuture<List<Student>> studentListFuture =
                CompletableFuture.supplyAsync(() -> getStudentList(), executorService);


        try {
            CompletableFuture.allOf(integerListFuture, studentListFuture).get(1000, TimeUnit.MILLISECONDS);
        } catch (Exception e) {
            log.error("future get failed,error={}", e);
        }

        return AsyncEntity.builder()
               .integerList(integerListFuture.getNow(Lists.newArrayList()))
               .studentList(studentListFuture.getNow(Lists.newArrayList()))
               .build();

    }


}

3 使用

@Controller
public class TestController {
   
    @Autowire
    private TestService testService;


    @RequestMapping("/test")
    public String test() {
        
       AsyncEntity asyncEntity = testService.getAsyncEntity();
       List<Integer> integerList = asyncEntity.getIntegerList();
       List<Student> studentList = asyncEntity.getStudentList();
       return "ok";
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线程池异步任务的安全性是一个重要的考虑因素。在使用线程池进行异步任务处理时,需要注意以下几点以确保任务的安全性: 1. 线程安全性:确保多个线程在同时访问共享资源时不会导致数据竞争或其他并发问题。可以通过使用线程安全的数据结构或加锁机制来实现。 2. 异常处理:在异步任务中,如果出现异常,需要及时捕获和处理,以避免线程池中的其他任务受到影响。可以使用try-catch语句块来捕获异常,并根据具体情况进行处理。 3. 线程间通信:在某些情况下,异步任务之间需要进行通信或协调。可以使用线程间的通信机制,如通过共享变量、信号量、管道等来实现线程间的数据传递和同步。 4. 取消任务:在某些情况下,可能需要取消正在执行的异步任务。可以通过使用Future对象来实现任务的取消操作。 5. 错误处理:异步任务中的错误处理非常重要。当任务失败或发生错误时,需要及时记录日志并采取适当的措施来处理错误,以避免系统崩溃或数据丢失。 综上所述,线程池异步任务的安全性取决于多个因素,包括线程安全性、异常处理、线程间通信、任务取消和错误处理等。合理地处理这些因素,可以确保异步任务的安全执行。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [线程池:异步处理 + 延迟响应](https://blog.csdn.net/u010730870/article/details/103489256)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [线程池 && 异步编排](https://blog.csdn.net/weixin_50999696/article/details/128101097)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值