有什么方法可以限制CompletableFuture的UniRun链的长度吗?

问题描述

有一个用于分发消息的地图,其定义为:

private static ConcurrentHashMap<Integer,CompletableFuture<Void>> dispatch = new ConcurrentHashMap<>();

发送消息的代码是:

dispatch.compute(event.getId(),(eventId,completableFuture) ->
        (completableFuture == null)
                ? CompletableFuture.runAsync(() -> {
            try {
                TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            log.info(""+event.hashCode()); // just for refers to an event
        },threadPoolExecutor)
                : completableFuture.thenRunAsync(() -> {
                    try {
                        TimeUnit.SECONDS.sleep(5);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    log.info(""+event.hashCode()); // just for refers to an event
                },threadPoolExecutor));

其中,每个事件都是一个10M的字符串。

class Event {
    private Integer id;
    private String message;
}

由于UniRun引用事件并且无法限制UniRun的长度,因此代码几乎总是OOM。有什么方法可以限制CompletableFuture的UniRun链的长度吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...