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

做品牌网站哪个好点在线wordpress

做品牌网站哪个好点,在线wordpress,个人网站设计首页界面,赣州新闻联播视频Guava 是托管在 Github.com 上的流行的 Google 开源的 Java 线程池库。 Guava 包含了许多有用的并发类,同时还包含了几个方便的 ExecutorService 实现,但这些实现类都无法通过直接实例化或子类化来创建实例。取而代之的是提供了 MoreExecutors 助手类来…

Guava 是托管在 Github.com 上的流行的 Google 开源的 Java 线程池库。

Guava 包含了许多有用的并发类,同时还包含了几个方便的 ExecutorService 实现,但这些实现类都无法通过直接实例化或子类化来创建实例。取而代之的是提供了 MoreExecutors 助手类来创建它们的实例。

给 Maven 添加 Guava 依赖

为了将Google Guava 库包含进当前的项目中,需要将下面的依赖项添加到 Maven pom 文件中。

<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>26.0</version>
</dependency>

 可以在 Maven 中央仓库 中找到最新版本的 Guava 库

创建 Executor

有时候,我们希望在当前线程或线程池中执行任务,具体在哪里取决于某些条件。这种情况下,你应该会更喜欢使用单个 Executor 接口,且只需切换实现即可。

虽然将当前线程中的任务的 Executor 或 ExecutorService 的提取出来单独实现并不困难,但它仍然需要编写一些样板代码,Guava 为我们提供了预定义的实例。

下面的范例演示了如何在同一个线程中执行任务。简单起见,提交的任务会将当前线程休眠 500 毫秒并阻塞当前线程,并在执行的调用完成后让结果立即可用

Executor executor = MoreExecutors.directExecutor();AtomicBoolean executed = new AtomicBoolean();executor.execute(() -> {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}executed.set(true);
});assertTrue(executed.get());

directExecutor() 方法返回的实例实际上是一个静态单例,因此使用此方法根本不会在对象创建上带来任何开销。

你应该更喜欢使用此方法来访问 MoreExecutors.newDirectExecutorService(),因为该 API 会在每次调用时创建完整的执行程序服务实现。

退出 Executor 服务

另一个常见问题是: 在线程池仍在运行其任务时关闭虚拟机。即使采用了取消机制,也无法保证任务执行良好,并在执行程序服务 ( Executor )关闭时停止工作。这可能会导致 JVM 在任务继续工作时无限期挂起。

为了解决这个问题,Guava 引入了一系列已经实例化好的执行器 ( Executor ) 服务。它们是守护线程模式,但会与 JVM 一起终止。

这些执行器服务还提供了 Runtime.getRuntime().addShutdownHook() 方法用于添加一个关闭钩子,用于设置 VM 在放弃挂起的任务之前等待一段预配置的超时时间。

下面的示例中,我们提交了一个无限循环的任务,我们使用了包含 100 毫秒超时时间的已经存在的执行程序服务来运行任务,并在超过配置的超时时间之后终止 VM 。如果没有 exitingExecutorService ,此任务将导致 VM 无限期挂起。

ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(5);
ExecutorService executorService = MoreExecutors.getExitingExecutorService(executor, 100, TimeUnit.MILLISECONDS);executorService.submit(() -> {while (true) {}
});

监听装饰器

监听装饰器允许我们封装 ExecutorService 并在提交任务时返回 ListenableFuture 实例而不是简简单单的 Future 实例。

ListenableFuture 接口扩展自 Future 接口,并添加了一个新方法 addListener(),该方法用于添加在将来完成时调用的侦听器。

一般情况下,我们很少直接使用 ListenableFuture.addListener() 方法,而是使用 Futures 类提供的许多辅助方法。例如,通过Futures.allAsList() 方法,我们可以在单个 ListenableFuture 中组合多个 ListenableFuture 实例,并会在这些实例在成功完成后将所有的 futures 合并并返回结果。

ExecutorService executorService = Executors.newCachedThreadPool();
ListeningExecutorService listeningExecutorService = MoreExecutors.listeningDecorator(executorService);ListenableFuture<String> future1 = listeningExecutorService.submit(() -> "简单");
ListenableFuture<String> future2 = listeningExecutorService.submit(() -> "教程");String greeting = Futures.allAsList(future1, future2).get().stream().collect(Collectors.joining(""));
assertEquals("简单-简单", greeting);

http://www.yayakq.cn/news/861976/

相关文章:

  • 临沂建网站哪家好搞网站开发的程序员属于哪一类
  • 官方网站welcome加盟网站分页怎么做seo
  • 泉州网站优化排名推广浙江网站建设方案优化
  • 网站建设制作公司 首推万维科技免费心理咨询
  • 公司网站搭建流程咸阳营销型网站建设
  • 论坛型网站建设中国市场营销网网站
  • 海南省住房和城乡建设厅官网网站wordpress 数据库 旧Ip
  • 怎么把网站做成自适应山东坤泰建设集团网站
  • 中国建设银行网站的社保板块在哪查询房产信息个人的房产信息查询
  • 做网站有视频教吗wordpress数据库连接文件
  • 跑腿网站建设什么是互联网企业
  • 做360网站优化网架公司运营经验
  • php网站开发过程考试做移动网站排名软件
  • 河北省建设执业资格注册管理中心网站灵感关键词生成器
  • 有关建筑企业的网站有哪些居然之家设计家官网
  • 公司的网站开发费计入什么科目网站建设简单合同模板
  • 主流网站开发采用内蒙古旅游攻略
  • 惠东做网站公司wordpress 微信卡券
  • 桥西区建设局网站网站建设 seo优化
  • 工业设计网站哪家好qq网页游戏排行榜
  • 漳州网站开发公司网站域名续费
  • angularjs 做团购网站vue登录页面模板
  • 商务网站建设与维护考试餐饮加盟
  • 集团网站手机版芜湖市建设办网站
  • 网站安装模板注册贸易公司流程及费用
  • 网站设计 做鼠标效果企业网站的建设对于网络品牌的塑造作用
  • 网站制作怎么入门做前端常用的网站及软件
  • 查看网站被百度收录辽宁建设工程信息网怎么上传业绩
  • 东莞做网站 南城石佳丽水城乡建设局网站
  • 网站开发实战视频商业空间设计案例分析