2022-05-31 hutool的ThreadUtil使用

需求:主要数据已经导入,需要使用已导入的数据计算一些值,计算可以延后使用异步的方式进行

解决方式:

方式一

    public static void main(String[] args) {
        Runnable r1 = () -> {
            System.out.println("000000");//这里写计算方式
        };
        ThreadUtil.execute(r1);//异步执行
    }

方式二:Score中调用计算方法,Score需要实现Runnable并重写run()方法,然后开启线程

package xxx;

import cn.stylefeng.guns.modular.physique.entity.AdultCondition;
import cn.stylefeng.roses.core.util.SpringContextHolder;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.ArrayList;
import java.util.List;

public class Score implements Runnable { //实现Runnable

    @Autowired
    private static DataService dataService = SpringContextHolder.getBean(DataService.class);

    //存放构造器中的参数数据
    private List<Data> dataList= null;
    private String type = null;

    public Score (List<Data> dataList, String type) {
        //构造器中赋值参数数据
        this.dataList= dataList;
        this.type = type;
    }

    @Override
    public void run() { //重写run()方法
        //存放分数计算完成的datalist
        List<Data> datas= new ArrayList<>();
        //遍历构造器中传入的参数
        for (Data data: dataList) {
            //计算得分
            Data getData= dataService.getScoreData(data, type);
            datas.add(getData);
        }
        dataService.updateBatchById(datas);
    }
}

开启线程

ThreadUtil.execute(new Score(list1,type));//异步线程计算得分

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThreadUtil.excAsync()方法是Hutool工具类库中的一个线程池工具方法,可以用于执行一个异步任务。它的用法如下: ```java ThreadUtil.excAsync(Runnable runnable) ``` 其中,参数runnable是一个实现了Runnable接口的任务对象,表示需要异步执行的任务。 该方法会返回一个Future对象,可以通过该对象来获取异步任务的执行结果。如果异步任务执行过程中抛出了异常,可以通过调用Future.get()方法获取到该异常。 下面是一个示例代码: ```java import cn.hutool.core.thread.ThreadUtil; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; public class Test { public static void main(String[] args) throws ExecutionException, InterruptedException { Future<?> future = ThreadUtil.excAsync(() -> { // 执行异步任务的代码 System.out.println("异步任务开始执行"); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("异步任务执行完毕"); }); System.out.println("主线程继续执行"); // 获取异步任务的执行结果 future.get(); } } ``` 在上面的示例代码中,我们通过ThreadUtil.excAsync()方法启动了一个异步任务,该任务是一个简单的线程休眠3秒钟后输出一条信息的任务。 在主线程中调用future.get()方法会阻塞主线程,直到异步任务执行完毕。如果异步任务中发生了异常,这里也会抛出ExecutionException异常,我们可以通过catch块来处理这种情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值