等待线程池中线程执行完毕

利用原子计数器技术,等于任务数时返回 

package com.qyc.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qyc.entity.HaxxData;
import com.qyc.service.ShowBigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.LongAdder;

@Service
public class ShowBigServiceImpl implements ShowBigService {

    @Autowired
    private StudentServiceImpl stuService;

    @Autowired
    private StuInfoServiceImpl stuInfoService;

    @Override
//    @Cacheable(cacheNames = "HaxxData")
    public HaxxData updateData() {
        HaxxData haxxData = new HaxxData();
        //获取总人数
        haxxData.setSum(stuService.selectSum());

        //获取就业人数
        haxxData.setNow(stuService.selectNow());

        //获取就业率
        double emp = Double.valueOf(haxxData.getNow())/Double.valueOf(haxxData.getSum());
        emp*=100;
        BigDecimal b   =   new   BigDecimal(emp);
        haxxData.setEmploymentRate(b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue());
        ExecutorService pool = Executors.newFixedThreadPool(5);
        //原子计数器
        LongAdder adder = new LongAdder();
        //获取就业类型
        pool.execute(()->{
            haxxData.setIndustry(stuInfoService.getIndustry());
            adder.increment();
        });

        //获取专业
        pool.execute(()->{
            haxxData.setMajor(stuInfoService.getmajor());
            adder.increment();
        });

        //获取日期
        pool.execute(()->{
            haxxData.setTimeY(stuInfoService.getTime().get("y"));
            haxxData.setTimeX(stuInfoService.getTime().get("x"));
            adder.increment();
        });

        //获取工资
        pool.execute(()->{
            haxxData.setPay(stuInfoService.getPay());
            adder.increment();
        });

        //获取福利
        pool.execute(()->{
            haxxData.setWelfare(stuInfoService.getWelfare());
            adder.increment();
        });

        //获取渠道
        pool.execute(()->{
            haxxData.setChannel(stuInfoService.getChannel());
            adder.increment();
        });
        //判断
        while (true){
            if(adder.sum()==6l){
                return haxxData;
            }
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值