Posts Tagged ‘ JAVA

Java Fork/Join框架

原文链接:A Java Fork/Join Framework(PDF) – Doug Lea

译序

Doug Lea 大神关于Java 7引入的他写的Fork/Join框架的论文。

响应式编程Reactive Programming / RP)作为一种范式在整个业界正在逐步受到认可和落地,是对过往系统的业务需求理解梳理之后对系统技术设计/架构模式的提升总结。Java作为一个成熟平台,对于趋势一向有些稳健的接纳和跟进能力,有着令人惊叹的生命活力:

  1. Java 7提供了ForkJoinPool,支持了Java 8提供的StreamReactive StreamRP的一个核心组件)。
  2. 另外Java 8还提供了Lamda(有效地表达和使用RP需要FP的语言构件和理念)。
  3. 有了前面的这些稳健但不失时机的准备,在Java 9中提供了面向RPFlow API,为Java圈子提供了官方的RP API,标志着RP由集市式的自由探索阶段 向 教堂式的统一使用的转变。

通过上面这些说明,可以看到ForkJoinPool的基础重要性。

对了,另外提一下Java 9Flow API@author也是 Doug Lee 哦~

PS:基于Alex/萧欢 翻译、方腾飞 校对的译文稿:Java Fork Join 框架,补译『结论』之后3节,调整了格式和一些用词,整理成完整的译文。译文源码在GitHub的这个仓库中,可以提交Issue/Fork后提交代码来建议/指正。

0. 摘要

这篇论文描述了Fork/Join框架的设计、实现以及性能,这个框架通过(递归的)把问题划分为子任务,然后并行的执行这些子任务,等所有的子任务都结束的时候,再合并最终结果的这种方式来支持并行计算编程。总体的设计参考了为Cilk设计的work-stealing框架。就设计层面来说主要是围绕如何高效的去构建和管理任务队列以及工作线程来展开的。性能测试的数据显示良好的并行计算程序将会提升大部分应用,同时也暗示了一些潜在的可以提升的空间。

Read more

《RabbitMQ官方指南》RPC

远程过程调用

(RPC)

(Java 客户端版)

在第二章(工作队列  Work Queues)中,我们学习了如何使用工作队列在多用户之间分配耗时的任务。

但是如果我们需要在远程电脑上运行一个函数方法,并且还要等待一个返回结果该怎么办?好吧,这将会是一个不一样的故事。这种模式通常被我们称为远程过程调用或者RPC.

在本章教程中,我们将会学习使用RabbitMQ去搭建一个RPC系统:一个客户端和一个可以升级(扩展)的RPC服务器。由于我们没有任何的值得分配的耗时的任务,所以我们将创建一个返回斐波那契数列的虚拟的RPC服务。

Read more

Byte Buddy 教程(1.1)-编写一个安全的库

Java 语言带有一套比较严格的类型系统。Java 要求所有变量和对象都有一个确定的类型,并且任何向不兼容类型赋值都会造成一个错误。这些错误通常都会被编译器检查出来,极少情况下会被 Java 运行时检查到,然后抛一个非法类型的错误。如此严格的类型在大多数情况下是比较令人满意的,比如在编写业务应用时。通常,可以以任何模型元素表示其自己的类型这种明确的方式来描述业务域。通过这种方式,我们可以用 Java 构建具有非常强可读性和稳定性的应用,应用中的错误也非常贴近源码。除此之外,Java 严格的类型系统造就 Java 在企业编程中的普及。

Read more

JAVA互斥锁(synchronized&Lock):行为分析及源码

JVM中有这样一段注释:

// The base-class, PlatformEvent, is platform-specific while the ParkEvent is
// platform-independent.  PlatformEvent provides park(), unpark(), etc., and
// is abstract -- that is, a PlatformEvent should never be instantiated except
// as part of a ParkEvent.
// Equivalently we could have defined a platform-independent base-class that
// exported Allocate(), Release(), etc.  The platform-specific class would extend
// that base-class, adding park(), unpark(), etc.
//
// A word of caution: The JVM uses 2 very similar constructs:
// 1. ParkEvent are used for Java-level "monitor" synchronization.
// 2. Parkers are used by JSR166-JUC park-unpark.
//
// We'll want to eventually merge these redundant facilities and use ParkEvent.

Read more

《Java NIO教程》Java NIO Path

原文链接     作者:Jakob Jenkov     译者:黄国鹏

Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新。Java的Path接口在Java7 中被添加到Java NIO,位于java.nio.file包中, 其全路径是java.nio.file.Path。

一个Path实例代表了一个文件系统中的路径。一个路径可以指向一个文件或者一个文件夹。一个路径可以是绝对路径或者是相对路径。绝对路径是从根路径开始的全路径,相对路径是一个相对其他路径的文件或文件夹路径。相对路径可能会造成一点混乱,但是不要担心,在本文章中,我会详细解释相对路径的。

Read more

《Spring 5 官方文档》21. 与其他Web框架集成

原文链接 译者:dan  QQ:903585177

21. 与其他Web框架集成

21.1 简介

Spring Web Flow

Spring Web Flow (SWF) 旨在成为管理Web应用程序页面流的最佳解决方案。

SWF与Servlet和Portlet环境中的Spring MVC和JSF等现有框架集成。 如果您有一个业务流程(或流程)将受益于会话模型而不是纯粹的请求模型,则SWF可能是解决方案。

SWF允许您将逻辑页面流作为在不同情况下可重用的自包含模块捕获,因此非常适合构建引导用户通过驱动业务流程的受控导航的Web应用程序模块。

Read more

《NETTY官方文档》4.0的新特性及注意点

原文链接 译者:裘卡

此文档涵盖了此次Netty大版本中值得关注的变更点及新特性,以帮助你将自己的应用顺利移植到新版本。

Read more

线程亲和性(Thread Affinity)

原文链接 译者:裘卡

如果你正在开发低延迟的网络应用,那应该对线程亲和性(Thread affinity)有所了解。线程亲和性能够强制使你的应用线程运行在特定的一个或多个cpu上。通过这种方式,可以消除操作系统进行调度过程导致线程迁移所造成的影响。幸运的是,刚好有一个这么一个java库 Java-Thread-Affinity ,并且很容易就可以整合到你的netty应用中。

Read more

《Log4j官方文档》 JSON配置

Log4j不仅能通过XML配置,也能通过JSON配置。如你所知,JSON的格式非常类似于紧凑版XML。每个键代表了插件名称,对应的值是属性。键中可以有子级插件。如下,“ThresholdFilter, Console, PatternLayout”都是插件。Console的值是“STDOUT”,意为日志控制台输出;“ThresholdFilter”的值是被设为调试级。
Read more

《Spring Data 官方文档》4.7 Spring Data扩展

原文链接 译者:zhanghTK

4.7 Spring Data扩展

这部分说明Spring Data一系列的扩展功能,可以使Spring Dta使用多样的上下文.目前大部分集成是针对Spring MVC.
Read more

《HttpClient 官方文档》第三章 HTTP 状态管理

原文链接 译者[陈志军]

通常 HTTP 被设计为无状态,面向请求/响应的协议,对于有一些逻辑相关的请求/响应交换的有状态会话没有特别的规定。正当 HTTP 协议越来越流行和被认可,越来越多之前没有打算使用它的系统,现在也开始为了应用程序而使用它。例如电子商务应用的内容传输。因此,支持 HTTP 状态管理变得非常有必要。
NetScape(网景公司),曾经引领网页客户端和服务器端软件的发展,在他们的产品中基于专有的规范,提供了 HTTP 状态管理的支持。之后,NetScape 尝试通过发布规范草案来标准化这种机制。这些努力通过 RFC 标准促进了正式的规范定义。但是,状态管理在很多应用程序中仍然支持 Netscape 的草案而不兼容官方的标准。很多Web浏览器的主要开发人员觉得有必要保留这些极大地促进标准兼容性的草案。

Read more

《HttpClient 官方文档》第五章 Fluent API

原文链接  译者[white]

第五章:流式 API

5.1 易用 API 接口

4.2版本的 HttpClient 带来了一组非常容易使用的流式 API(Fluent API) 接口。暴露的流式API(Fluent API) 接口中仅仅是 HttpClient 最基本的一些功能,这些接口是在不需要使用 HttpClient 丰富的灵活性时,为了一些简单的功能而准备的。 例如:流式接口(Fluent API) 增加了使用者对连接的管理和资源的分配上的便利性。这里有一系列通过 HttpClient 流式接口(Fluent API) 执行 HTTP 请求的示例:

Read more

哪个线程执行 CompletableFuture’s tasks 和 callbacks?

原文链接  作者:Tomasz Nurkiewicz   译者:simonwang

CompletableFuture尽管在2014年的三月随着Java8被提出来,但它现在仍然是一种相对较新潮的概念。但也许这个类不为人所熟知是好事,因为它很容易被滥用,特别是涉及到使用线程和线程池的时候。而这篇文章的目的就是要描述线程是怎样使用CompletableFuture的。

Read more

ExecutorService-10个要诀和技巧

原文链接 作者:Tomasz Nurkiewicz    译者:simonwang

ExecutorService抽象概念自Java5就已经提出来了,现在是2014年。顺便提醒一下:Java5和Java6都已不被支持,Java7在半年内也将会这样。我提出这个的原因是许多Java程序员仍然不能完全明白ExecutorService到底是怎样工作的。还有很多地方要去学习,今天我会分享一些很少人知道的特性和实践。然而这篇文章仍然是面向中等程序员的,没什么特别高级的地方。

Read more

Maven的Java插件开发指南

原文地址 译者:刘小刘

介绍

本指南的目标是帮助用户使用Java开发Maven插件。

重要声明:插件命名规范和Apache Maven商标

通常将你的插件命名为<yourplugin>-maven-plugin。
强烈反对命名为maven-<yourplugin>-plugin(maven在插件名开头),因为这是Apache Maven组织为官方Maven插件保留的命名格式,用org.apache.maven.plugins作为组id。使用此命名是对Apache Maven商标的侵权。
Read more

return top