理解同步器框架AbstractQueuedSynchronizer

一、背景

Java 在 1.5 版本引入了 java.util.concurrent包,用以支持并发编程,降低并发编程的复杂性;而其中大部分的同步器(例如 lock, barriers 等等)都是基于 AbstractQueuedSynchronizer 类,一般我们称为AQSjava.util.concurrent.locks.AbstractQueuedSynchronizer 出自 Doug Lea 带佬,他的 个人博客 上有一篇相关论文 《The java.util.concurrent Synchronizer Framework》,在我们深入研究 AQS 之前,有必要拜读一下该论文,翻译见笔者的另一篇博客《The java.util.concurrent Synchronizer Framework》原文翻译 之后结合相关源码实现进行分析。

阅读全文 »

《The java.util.concurrent Synchronizer Framework》原文翻译

摘要

在 J2SE1.5 的 java.util.concurrent包(下面简称为 j.u.c 包 )中,大多数的同步器(例如锁、栅栏等。)都是使用基于 AbstractQueuedSynchronizer类(下面简称为 AQS 类),这个简单的小型框架构建的。这个框架提供了原子管理同步状态、线程的阻塞和解除阻塞、以及排队的通用机制。本文描述了该框架的基本原理、设计、实现、使用和性能。

阅读全文 »

Chapter 2. Grammars

本章描述了本规范中用于定义程序词法和语法结构的上下文无关语法(context-free grammars)。

阅读全文 »

Chapter 1. Interduction

Java® 编程语言是一种通用的、并发的、基于类的、面向对象的语言。它被设计得足够简单,以至于许多程序员都能熟练使用该语言。Java 编程语言与 C 和 C++ 有关,但其组织方式却截然不同,它省略了 C 和 C++ 的许多方面,并包含了其他语言的一些思想。它是一种生产语言,而不是一种研究语言,因此,正如 C. A. R. Hoare 在他关于语言设计的经典论文中建议的那样,设计避免包含新的和未经测试的功能。

阅读全文 »

HttpClient连接无法释放问题

在中银消金三方服务平台,数据源配置中可以配置数据源调用的超时时间,代码中使用这个用户配置的超时时间作为 connectionRequestTimeoutconnectionTimeoutsocketTimeout 参数。在数据源调用明细中,明显可以看出数据源的调用时长有远大于配置的超时时间,客户提出不符合预期,要求数据源的调用时间在超过配置的超时时间后能够终止。

阅读全文 »

Chapter 12. Execution

此章节规定了程序执行期间发生的活动。他围绕 Java 虚拟机以及构成程序的类、接口和对象的声明周期进行组织编写。

Java 虚拟机通过加载指定的类然后调用该类中的 main 方法来启动。第 12.1 节概述了执行 main 所涉及的加载、链接和初始化步骤,作为本章节的概念的介绍。下一个部分讲述了加载 12.2 、链接 12.3 和初始化 12.4 的细节。

本章后续部分说明创建新类实例的过程(第 12.5 节 );和类实例的最终确定( 12.6 )。它通过描述类的卸载(第 12.7 节 )和程序退出时遵循的过程(第 12.8 节 )来结束。

阅读全文 »

《TCP/IP 详解 卷一:协议》第五章:Internet 协议

5.1 引言

IP是 TCP/IP 协议族中的核心协议。所有 TCP、 UDP、 ICMP 和 IGMP 数据都通过 IP 数据报传输。 IP 提供了一种尽力而为、无连接的数据报交付服务。 “尽力而为”的含义是不保证 IP 数据报能成功到达目的地。虽然 IP 不是简单丢弃所有不必要流量,但它也不对自己尝试交付的数据报提供保证。当某些错误发生时,例如一台路由器临时用尽缓冲区, IP 提供一个简单的错误处理方法: 丢弃一些数据(通常是最后到达的数据报)。任何可靠性必须由上层(例如 TCP)提供。 IPv4 和 IPv6 都使用这种尽力而为的基本交付模式。

无连接”意味着 IP 不维护网络单元(即路由器)中数据报相关的任何链接状态信息,每个数据报独立于其他数据报来处理。这也意味着 IP 数据报可不按顺序交付。如果一个源主机向同一目的地发送两个连续的数据报(第一个为 A,第二个为 B),每个数据报可以独立路由,通过不同路径,并且 B 可能在 A 之前到达。 IP 数据报也可能发生其他问题:它们可能在传输过程中被复制,可能改变内容从而导致错误。此外, IP 之上的一些协议(通常是 TCP)需要处理这些潜在问题,以便为应用提供无差错的交付。

阅读全文 »

《TCP/IP 详解 卷一:协议》第四章:地址解析协议

4.1 引言

IP 协议的设计目标是为跨越不同类型物理网络的分组交换提供互操作。这需要网络层软件使用的地址和底层网络硬件使用的地址之间进行转换。网络接口硬件通常有一个主要的硬件地址(例如以太网或 802.11 无线接口的 48 位地址)。由硬件交换的帧需要使用正确的硬件地址定位到正确的接口;否则,无法传输数据。但是,一个传统 IPv4 网络需要使用自己的地址:32 位的 IPv4 地址。如果一台主机要将一个帧发送到另一台主机,仅知道这台主机的 IP 地址是不够的,还需要知道主机在网络中的有效硬件地址。操作系统软件(即以太网驱动程序)必须知道目的主机的硬件地址,以便直接向它发送数据。对于 TCP/IP 网络,地址解析协议(ARP) [RFC0826] 提供了一种在 IPv4 地址和各种网络技术使用的硬件地址之间的映射。 ARP 仅用于 IPv4, IPv6 使用邻居发现协议,它被合并入 ICMPv6 (见第 8 章)。

阅读全文 »