当前位置: 首页 > news >正文

济南住房和城乡建设部网站土巴兔装修口碑怎样

济南住房和城乡建设部网站,土巴兔装修口碑怎样,网页ui设计培训,红色的网站一、什么是Future? 在并发编程中,可以通过Future对象来异步获取结果。 使用Thread或runnable接口都不能获取异步的执行结果,因为他们没有返回值。而通过实现Callable接口和Future就可以获取异步执行的结果,当异步执行结束后&…

一、什么是Future?

在并发编程中,可以通过Future对象来异步获取结果
使用Thread或runnable接口都不能获取异步的执行结果,因为他们没有返回值。而通过实现Callable接口和Future就可以获取异步执行的结果,当异步执行结束后,返回结果将保存在Future中。使用Future就可以让我们暂时去处理其他的任务而无需一直等待结果,等异步任务执行完毕再返回其结果。

二、Future中的get方法

1、get方法
获取任务结束后返回的结果,如果调用时,任务还没有结束,则会进行阻塞线程,直到任务完成。该阻塞是可以被打断的,打断的线程是调用get方法的线程,被打断后原任务会依旧继续执行。

V get() throws InterruptedException, ExecutionException;

2、指定时间的get方法
获取任务结束后返回的结果,如果调用时,任务还没有结束,则会进行阻塞线程,等待一定时间,如果在规定时间内任务结束则返回结果,否则抛出TimeoutException,超时后任务依旧会继续执行。该阻塞是可以被打断的,打断的线程是调用get方法的线程,被打断后原任务会依旧继续执行。

V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;

三、Future代码示例

步骤1:创建一个线程池

public class AsyncTaskExecutor {/*** 核心线程数*/private static final int corePoolSize = 10;/*** 最大线程数*/private static final int maxPoolSize = 30;/*** 空闲线程回收时间* 空闲线程是指:当前线程池中超过了核心线程数之后,多余的空闲线程的数量*/private static final int keepAliveTime = 100;/*** 任务队列/阻塞队列*/private static final int blockingQueueSize = 99999;private static final ThreadPoolExecutor executorPool = new ThreadPoolExecutor(corePoolSize,maxPoolSize,keepAliveTime,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<>(blockingQueueSize),new ThreadFactoryBuilder().setNameFormat("AsyncTaskThread" + "-%d").build(),new ThreadPoolExecutor.CallerRunsPolicy());/*** 异步任务执行** @param task*/public static void execute(Runnable task) {executorPool.execute(task);}/*** 异步执行任务Callable, 通过Future获取结果** @param task* @param <T>* @return*/public static <T> Future<T> submit(Callable<T> task) {return executorPool.submit(task);}/*** 异步执行任务Runnable,通过Future获取结果** @param task* @return*/public static Future<?> submit(Runnable task) {return executorPool.submit(task);}}

步骤2:编写测试类

    @Testpublic void test2() {try {Future<String> future = AsyncTaskExecutor.submit(() -> {log.info("[Future Task] future task start...");try {//模拟任务执行Thread.sleep(5000);} catch (InterruptedException e) {log.info(e.getMessage());}log.info("[Future Task] future task end...");return "Task completed...";});//执行其他任务log.info("[Main Thread] main thread is running...");//使用future阻塞等待任务完成,并获取结果String futureResult = future.get();log.info("[Main Thread] {}", futureResult);}catch (Exception e) {e.printStackTrace();}}

步骤3:查看结果

2024-05-28 10:58:23.633  INFO 1184 --- [           main] com.example.demo.dao.UserDaoTest         : [Main Thread] main thread is running...
2024-05-28 10:58:23.633  INFO 1184 --- [yncTaskThread-0] com.example.demo.dao.UserDaoTest         : [Future Task] future task start...
2024-05-28 10:58:28.633  INFO 1184 --- [yncTaskThread-0] com.example.demo.dao.UserDaoTest         : [Future Task] future task end...
2024-05-28 10:58:28.634  INFO 1184 --- [           main] com.example.demo.dao.UserDaoTest         : [Main Thread] Task completed...

四、ListenableFuture

public class AsyncTaskExecutor {/*** 核心线程数*/private static final int corePoolSize = 10;/*** 最大线程数*/private static final int maxPoolSize = 30;/*** 空闲线程回收时间* 空闲线程是指:当前线程池中超过了核心线程数之后,多余的空闲线程的数量*/private static final int keepAliveTime = 100;/*** 任务队列/阻塞队列*/private static final int blockingQueueSize = 99999;private static final ThreadPoolExecutor executorPool = new ThreadPoolExecutor(corePoolSize,maxPoolSize,keepAliveTime,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<>(blockingQueueSize),new ThreadFactoryBuilder().setNameFormat("AsyncTaskThread" + "-%d").build(),new ThreadPoolExecutor.CallerRunsPolicy());/*** 创建一个ListeningExecutorService,用于执行异步任务* (通过submit提交任务,以ListenableFuture获取结果)*/private static final ListeningExecutorService LISTENING_EXECUTOR = MoreExecutors.listeningDecorator(executorPool);/*** 异步任务执行** @param task*/public static void execute(Runnable task) {executorPool.execute(task);}/*** 异步执行任务Callable, 通过ListenableFuture获取结果** @param task* @param <T>* @return*/public static <T> ListenableFuture<T> submit(Callable<T> task) {return LISTENING_EXECUTOR.submit(task);}/*** 异步执行任务Runnable,通过Future获取结果** @param task* @return*/public static ListenableFuture<?> submit(Runnable task) {return LISTENING_EXECUTOR.submit(task);}
}
    @Testpublic void test2() {try {
//            sqlSession = MybatisUtils.getSqlSession();
//            UserDao mapper = sqlSession.getMapper(UserDao.class);
//            boolean x = mapper.addUser(new User(6, "eeee", "eeee", "school666"));
//            if (x == true) {
//                log.info("OK..........");
//                mapper.getUserList().forEach(user -> System.out.println(user));
//            }//            //步骤1:创建异步任务
//            CommonTask task = new CommonTask(1L, ModelEnum.Chinese);
//            //步骤2:调用线程池异步执行任务
//            AsyncTaskExecutor.execute(task);
//            log.info("main thread over...");CompletableFuture<School> schoolFuture = new CompletableFuture<>();ListenableFuture<School> listenableFuture1 = AsyncTaskExecutor.submit(() -> {try {//模拟任务执行Thread.sleep(2000);} catch (InterruptedException e) {log.info(e.getMessage());}return new School("DSchool");});ListenableFuture<School> listenableFuture2 = AsyncTaskExecutor.submit(() -> {try {//模拟任务执行Thread.sleep(2000);} catch (InterruptedException e) {log.info(e.getMessage());}return new School("ESchool");});Futures.successfulAsList(listenableFuture1, listenableFuture2).get();School resSchool = listenableFuture1.get(3000, TimeUnit.MILLISECONDS);log.info("[Main Thread] result is {}", JSON.toJSON(resSchool));}catch (Exception e) {e.printStackTrace();}}
http://www.yayakq.cn/news/277478/

相关文章:

  • 流行的网站设计风格wordpress 4.9 php
  • 罗湖专业做网站公司一键生成文案的网站
  • 建设网站预期效果怎么写网站添加微信
  • 网站图片最大尺寸网站建设实用教程
  • 南京网页网站制作网页游戏开服表弹窗
  • 怎么做百度联盟网站网站建设专业的
  • 上海平台网站建设公网站代码制作软件
  • 用网站做自我介绍电子商务网站建设应用技术
  • 我想做个网站推广怎么做龙岩seo
  • 品牌网站策划书海宁市网站建设
  • 辽宁市营商环境建设局网站东莞常平隐贤山庄门票多少
  • 怎么做网站设网站免费源码下载
  • 网站推广策划方案毕业设计苏州企业网站公司都有哪些
  • 宝安网站建设企业网站的作用和意义
  • 中国化工网网站建设建议如何开发wordpress
  • 怎么不花钱建立网站百度seo免费推广教程
  • 网站开发技术都有哪些天元建设集团有限公司朱华
  • wordpress 核心文件海淀区seo搜索引擎
  • 国内旅游网站排名制作小程序的公司
  • 丹灶网站建设案例禅城网站开发
  • 做产品表情的网站seo的培训课程
  • 手机做网站知乎松江做网站费用
  • 哪个网站专门做游戏脚本网站开发概要设计模板
  • 仿做网站国际十大市场营销公司
  • 伊春网站建设公司wap网站生成
  • 临沂网站制作建设淘客网站怎么做
  • 安徽建设银行官方网站临沂网站关键字优化
  • 连江福州网站建设做qq图片的网站有哪些
  • 司法局网站建设方案网站建设cms
  • 做ppt比较好的网站有哪些网站设计制作的连接方式