@Async("asyncTaskExecutor") 没有并发处理问题?

@Override
    @Async("asyncTaskExecutor")
    public void onMessage(MapRecord<String, String, String> entries) {
        redisTemplate.opsForValue().increment("debug-message");
        int c = (int) redisTemplate.opsForValue().get("debug-message");
        int time = 1;
        try {
            while(time<=60){
                time++;
                Thread.sleep(1000);
                redisTemplate.opsForValue().increment("debug-message-"+c);
            }
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
}

核心线程1 最大线程1000 使用CallerRunsPolicy

这个代码是redis stream的接收的

一次性插入了大量数据 但是并没有出现并发处理的情况

这个是为什么?我理解错误了还是使用错误了?

阅读 1.3k
3 个回答

是我理解错误
这个异步,而不是多线程,我的代码造成了阻塞,所以无法进行并发处理,以致于是一个个计时器去完成,而不是并发处理,异步的执行代码不可以是阻塞的

是个虚拟化线程的好场景

新手上路,请多包涵

你这个代码,异步操作,并且有临界资源int c = (int) redisTemplate.opsForValue().get("debug-message");,在并发高的情况下应该会有竞争吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏