CompletableFuture线程不安全

/**
	 * 对list里的元素并行处理,并待所有任务结束后才停止阻塞
	 * 
	 * @param list     需要并行处理的元素
	 * @param consumer 消费元素
	 * @param timeout  并行处理超时设置
	 */
	public static <T> void execute(List<T> list, Consumer<T> consumer, int timeout) {
		List<CompletableFuture<Void>> futures = new ArrayList<>();
		for (T t : list) {
			CompletableFuture<Void> f = CompletableFuture.runAsync(() -> {
				synchronized (t) {
					consumer.accept(t);
				}
			}, pool1);
			futures.add(f);
		}
		CompletableFuture<Void> all = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]));
		try {
			all.get(timeout, TimeUnit.SECONDS);
		} catch (Exception e) {
			e.printStackTrace();
		}
	};

在递归中,从第二层开始并行查询数据库或者直接并行查询数据库,最后发现有概率丢失数据

几次相同条件查询的截图如下,所有查询未超时

一次2.29M一次2.28M,反复测试过是可以重现

 

 

 

 

 

 

 

 

 

题主发一下调用的时候的代码。尤其是看看 consumer 对象传的什么内容。