如何建CMS网站企业标识设计公司
news/
2025/9/23 16:16:40/
文章来源:
如何建CMS网站,企业标识设计公司,肃宁县网站建设价格,青岛住房和城乡建设厅网站系列文章目录 文章目录 系列文章目录前言 前言
前些天发现了一个巨牛的人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;忍不住分享一下给大家。点击跳转到网站#xff0c;这篇文章男女通用#xff0c;看懂了就去分享给你的码吧。 常见的两种创建线程…系列文章目录 文章目录 系列文章目录前言 前言
前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到网站这篇文章男女通用看懂了就去分享给你的码吧。 常见的两种创建线程的方式。一种是直接继承Thread另外一种就是实现Runnable接口。
这两种方式都有一个缺陷就是在执行完任务之后无法获取执行结果。
从Java 1.5开始就提供了Callable和Future通过它们可以在任务执行完毕之后得到任务执行结果。
Future模式的核心思想是能够让主线程将原来需要同步等待的这段时间用来做其他的事情。因为可以异步获得执行结果所以不用一直同步等待去获得执行结果。 这里给一个实际使用的案例代码理论是一样的但是编码方式有多种。
关于代码的注意点和说明都在注释里面由于案例比较简单这里不再啰嗦。
package com.example.springboot;
import com.alibaba.fastjson2.JSON;
import com.example.springboot.entity.User;
import com.example.springboot.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
import java.util.function.Supplier;
/*** Future 机制测试*/
SpringBootTest
public class FutureTest {Autowiredprivate UserMapper userMapper;private static ThreadPoolExecutor pool;static {pool (ThreadPoolExecutor) Executors.newFixedThreadPool(10);}Testpublic void test1() throws Exception {// 创建一个调用次数为2的计数工具CountDownLatch countDownLatch new CountDownLatch(2);// 直接在异步内组装返回数据注意List不是线程安全的也可以采用Vector或者synchronized关键字方式ListUser listTmp new CopyOnWriteArrayList();// 通过异步返回接收因为是编码依次接收所以不存在安全问题ListUser listRe new ArrayList();// 异步执行 1CompletableFutureUser reStrFu1 CompletableFuture.supplyAsync(new SupplierUser() {Overridepublic User get() {try {Thread.sleep(2000);// 获取结果方式1直接组装到上层方法变量中User user userMapper.selectById(1);listTmp.add(user);return user;}catch (Exception e){e.printStackTrace();}finally {countDownLatch.countDown(); // 异步执行结束}return null;}}, pool);// 异步执行 2CompletableFutureUser reStrFu2 CompletableFuture.supplyAsync(new SupplierUser() {Overridepublic User get() {try {Thread.sleep(2000);// 获取结果方式1直接组装到上层方法变量中User user userMapper.selectById(2);listTmp.add(user);return user;}catch (Exception e){e.printStackTrace();}finally {countDownLatch.countDown(); // 异步执行结束}return null;}}, pool);// // 获取结果方式2带超时的参数
// listRe.add(reStrFu1.get(10, TimeUnit.SECONDS)); // 可以定义获取超时时间
// listRe.add(reStrFu2.get(10, TimeUnit.SECONDS)); // 可以定义获取超时时间// 获取结果方式3等待计数结束try {countDownLatch.await();} catch (Exception e) {e.printStackTrace();}listRe.add(reStrFu1.get());listRe.add(reStrFu2.get());System.out.println(listTmp JSON.toJSONString(listTmp));System.out.println(listRe JSON.toJSONString(listRe));}
}最后打印结果是一样的都是两条数据的JSON。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913126.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!