在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  iOS/ java代碼并發(fā)操作咨詢

java代碼并發(fā)操作咨詢

需求

分頁查詢數據列表的時候同時查詢總條數 想并發(fā)查詢 但是感覺下面的代碼有點繁瑣 有沒更簡便的方式 或者有什么第三方框架能夠簡化類似這樣的邏輯

    ExecutorService executorService = Executors.newFixedThreadPool(2);
    CountDownLatch countDownLatch = new CountDownLatch(2);
    Map<String, Object> map = new HashMap<>();
    // 一個線程查記錄數
    executorService.submit(() -> {
        List<Integer> data = Lists.newArrayList(1, 2, 3);
        map.put("data", data);
        countDownLatch.countDown();
    });
    // 一個線程查總條數
    executorService.submit(() -> {
        int count = 10;
        map.put("count", count);
        countDownLatch.countDown();
    });

    countDownLatch.await();
    
    System.out.println(map);
回答
編輯回答
毀憶

HashMap是非線程安全的,你這樣用一定會有問題的。不清楚你要達到的目標是什么,至少從上面的例子上來看,多線程不但沒有必要,還引入了新的問題。說說你的具體應用場景,也許在特定場景下你的想法是合適的。

2017年12月4日 06:33
編輯回答
敢試

一種簡便的方案

        CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {
            List<Integer> data = Lists.newArrayList(1, 2, 3);
            return data;
        }).thenAcceptBoth(CompletableFuture.supplyAsync(() -> 10), (d, c) -> {
            Map<String, Object> map = new HashMap<>();
            map.put("data", d);
            map.put("count", c);
            System.out.println(map);
        });
        future.get();
2018年1月24日 17:10