关于Hutool中线程工具-ThreadUtil的使用
项目中,上传文件,采用线程异步方式,防止断开连接。
在serviceimpl.java文件中,实现函数中,编写了该方法。
@Override
public Result generateTitlesAndPdfFromExcel(HttpServletResponse response, HttpServletRequest request, MultipartFile file, String doEncrypt) throws Exception {
List<String> stdNos = parseStdNoFromExcel(file);
....
// 异步生成题录excel和pdf文件
ThreadUtil.execAsync(() -> {
try {
writeDownTitleExcel(dwStdExcelTask, stdNos, excelFile, doEncrypt);
catch (Exception e) {
e.printStackTrace();
throw new DwException("生成题录失败!");
}
});
}
ThreadUtil.execAsync(),一个参考的例子:
ThreadUtil的出现就是为了更简单的使用线程。
自己试着用了其中两个方法,写了两个demo玩,发觉挺好用,记录一下。
方法1:ThreadUtil.excAsync();
方法1:ThreadUtil.execute();
@Test
public class AsyncTestController {
/**
* @author LiuWY
* @description 异步
* @date 2021/12/16
* @param args
* @return void
*/
public static void main(String[] args) {
try {
for(int i=0;i<5;i++){
ThreadUtil.execAsync(() -> {
int num = RandomUtil.randomInt(1000, 4000);
System.out.println(num);
});
System.out.println("第个线程:" + i);
}
System.out.println("完成");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 多线程实现线程等待的功能,所有线程的任务都指向完成后主线程才可以往下走
* @throws InterruptedException
*/
public static void test1() throws InterruptedException {
//初始化线程数量
CountDownLatch countDownLatch=ThreadUtil.newCountDownLatch(5);
for(int i=0;i<5;i++){
ThreadUtil.execute(() -> {
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
System.out.println("第"+ i +"个线程" );
//调用线程计数器-1
countDownLatch.countDown();
}
//唤醒主线程
countDownLatch.await();
System.out.println("完成");
}