`
songzi0206
  • 浏览: 158620 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
Group-logo
All are from ...
浏览量:33778
Group-logo
Programming w...
浏览量:19645
社区版块
存档分类
最新评论

First glimpse at Java Concurrent from Executors to FutureTask

阅读更多

      最近刚刚写完一个多线程的模块,感叹java concurrent强大的同时,整理了下近一周学习,打算大概记录下,

主要是读了部分concurrent包的代码. 有了java concurrent,客户端写多线程果然简单多了,首先需要用到的类是java.util.concurrent.Executors, 由它来生成线程执行器java.util.concurrent.ExecutorService,然后根据需要

可以用不同的方式运行线程,例如:单个任务可以用executorService.submit(task)或者execute(task);前者是

ExecutorService接口就有的方法,任务执行完以后可以返回值,后者是没有返回值。当然这两者区别还是蛮大的,

前者一定会将Runnable任务包装成FutureTask,后者就不一定了。多个任务可以用invokeAll/invokeAny提交执行。

简单示例:

ExecutorService es = Executors.newSingleThreadExecutor();
Future<String> r = es.submit(new Task());
es.shutdown();
try {
          r.get();//get result
} catch (InterruptedException e) {
			//
} catch (ExecutionException e) {
			//
}

 

      貌似重要学习入口在java.util.concurrent.Executors了,查看该类的说明,主要提供了java concurrent 包中ExecutorExecutorServiceScheduledExecutorServiceThreadFactoryCallable的工厂和实用方法。阅读

其代码也不多,发现他创建线程执行器大致分为两种,一种是ThreadPoolExecutor,另一种

ThreadPoolExecutor/ScheduledThreadPoolExecutor包装以后的线程执行器;创建Callable主要有两种,一是将Runnable

适配一下返回RunnableAdapter,另一是包装了Callable的PrivilegedCallable;创建ThreadFactory也主要是两种,都是

其内部类,一是DefaultThreadFactory,另一是PrivilegedThreadFactory;总之,他可以看作工厂方法类,其他创建的

ThreadFactory、Callable可以先放放。

   看完了Executors,也没看出什么。看来重要的学习入口在Executors创建的ExecutorService了。产看该接口,该接口

集成自父接口:Executor。Executor接口只定义了void execute(Runnable command)方法,用来执行提交的任务。而

ExecutorService除了execute方法之外,还定义了submit,invorkAll,invokeAny,shutdwon等等方法,主要用来执行并跟踪

多个异步任务,终止管理等。

   continue,AbstractExecutorService类提供了ExecutorService接口除了execute之外其他方法的默认实现。产看其代

码,发现真正执行任务的却是他没有实现的execute方法,其他执行线程的方法,如sumbit和invokeAll内部都会调用execute(Runnable)方法,而invokeAny方法在其调用的doInvokeAny方法中还是会在ExecutorCompletionService.submit

方法中调用execute(Runnable)方法。具体代码就不贴了,JDK中都有。这里顺便对submit,invokeAll,invokeAny方法的

区别不提了,JDK方法都有注释,比较简单。要提下,执行的任务。从void execute(Runnable command)的签名可以看出

他执行的任务是Runnable,众所周知Runnable任务是没有返回值的,若需要任务的返回值则需要Callable来作为任务,

这里Concurrent提供了Runnable和Callable的适配器。invokeAll,submit,invokeAny方法中会将Runnable包装成callable

来执行。具体:




 今天就写这些,下班了,留给下一次写ThreadPoolExecutor吧。

  • 大小: 47.8 KB
分享到:
评论

相关推荐

    glimpse 最新版本

    If you are installing Webglimpse via ssh, you will need to install Glimpse first. (The FTP and cPanel installers automatically retrieve and install the appropriate Glimpse binary). The most recent ...

    Bitter Java

    - **Protective Barrier:** In the context of software development, this likely refers to measures or strategies designed to shield systems from external threats such as security breaches or data ...

    Python库 | glimpse-0.1.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:glimpse-0.1.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Android代码-glimpse-android

    Give the right first impression with just a glimpse! Instead of center cropping images blindly, leverage Glimpse's eye to catch the right spot. Setup Add to top level gradle.build file allprojects { ...

    Node JS 实战最新版

    This book draws on their considerable experience, taking you from the very first steps of installing Node.js on your computer all the way to creating, debugging, and deploying production applications....

    Glimpse及web.condig默认设置

    标题中的“Glimpse”是指一款开源的ASP.NET调试工具,它允许开发者在浏览器中实时查看和诊断应用程序的运行状态。Glimpse通过在网页的底部添加一个小小的控制台,提供了一系列丰富的功能,包括数据库查询、HTTP信息...

    glimpse-client:Glimpse Android客户端实现,专为Google Glasses和移动设备设计

    由于标签中提到了“Java”,我们可以推断出glimpse-client是用Java语言编写的,这是Android应用开发的主流语言。Java的跨平台特性使得代码可以在不同类型的Android设备上运行,包括Google Glass。Java在Android开发...

    Android代码-Calendar Widget

    so that you can easily have a glimpse at your appointments. Want to contribute to the project? Start by translating the widget to another language. Visit the project at crowdin.net and be part of ...

    Post to Glimpse(测试版)「Post to Glimpse (BETA)」-crx插件

    添加上下文菜单项以将图像发布到Glimpse服务。 此扩展程序允许您轻松地从任何网站(如Facebook)发布任何图像到Glimpse(测试版)。只需右键点击图片,然后选择“Post to Glimpse”,然后按照说明操作即可。简单! ...

    Glimpse of the Future Numix

    【标题】:“Glimpse of the Future Numix”揭示了未来设计的视觉魅力 【描述】中的“Glimpse of the Future Numix”是一套由Numix团队创作的高质量壁纸集合,用户以3美元的价格从官方网站购得。这个套装包含了各种...

    使用Glimpse调试ASP.NET MVC应用程序

    Glimpse扩展为此提供了强大的工具,它是一个轻量级的服务器端调试和诊断工具,专为ASP.NET应用程序设计。Glimpse能够提供实时的、上下文相关的洞察力,帮助开发者理解应用程序的内部运作。 Glimpse的核心功能包括:...

    Google.It.Total.Information.Awareness

    From Google search to self-driving cars to human longevity, is Alphabet creating a neoteric Garden of Eden or Bentham's Panopticon? Will King Solomon's challenge supersede the Turing test for ...

    Glimpse.Login:Glimpse 的简单登录策略,可在生产环境中保护您的站点

    标题 "Glimpse.Login:Glimpse 的简单登录策略,可在生产环境中保护您的站点" 暗示我们正在讨论一个针对 Glimpse 的扩展,它提供了一种安全措施,允许在生产环境中对网站进行监控而不会泄露敏感信息。Glimpse 是一个...

    angular-glimpse:在你的 AngularJS 单页应用程序上有 Glimpse Heads-Up Display

    角度一瞥在您的 AngularJS 单页应用程序上有 Glimpse Heads-Up Display。安装此项目在任何包管理器上均不可用。 直接从 GitHub 使用。配置 var app = angular . module ( 'myApp' , [ 'wt.glimpse' ] ) ;...app . ...

    Glimpse.RavenDb:用于 Glimpse 的 RavenDb 分析插件

    明确通过 Glimpse.RavenDb.Profiler.AttachTo() Web.Config 通过 Glimpse.RavenDb.DocumentStoreApplicationKey AppSetting。 您还可以通过以下任一方式从文档中过滤敏感数据 调用 Glimpse.RavenDb.Profiler....

    Learning.Django.Web.Development

    From idea to prototype, a learner's guide for web development with the Django application framework About This Book Build two real-life based projects, one based on SQL and other based on NoSQL Best ...

    Yunus, Muhammad - Creating A World Without Poverty; Social Business and the Future of Capitalism

    nutritious yogurt for malnourished children in Bangladesh to building eyecare hospitals that will save thousands of poor people from blindness, Creating a World Without Poverty offers a glimpse of ...

    Glimpse-开源

    **GLIMPSE 开源图像处理程序** GLIMPSE 是一个专为初级用户设计的开源图像处理软件,旨在提供简单易用的界面和功能,让用户能够方便地处理各种图像文件。这款程序不仅支持多种常见的图像文件格式,如 BMP、PCX 和 ...

    LXR+mysql+glimpse+apache源码浏览平台搭建心得(一)

    本文将详细介绍如何使用LXR、MySQL、Glimpse和Apache搭建这样一个系统,主要针对Linux环境,但原理也适用于其他类Unix系统。 首先,LXR(Linux Cross-Reference)是一款强大的开源源码索引工具,它能为大型代码库...

Global site tag (gtag.js) - Google Analytics