随着多核芯片逐渐成为主流,大多数软件开发人员不可避免地需要了解并行编程的知识。而同时,主流程序语言正在将越来越多的并行特性合并到标准库或者语言本身之中。
类型转换错误信息通常表明在递归下行一个复合数据结构时出现概念性错误,虽然它通常比其它错误更易调试,但也具有更多隐蔽的错误行为。
Java? Collections Framework 是 Java 平台的一个重要部分。桌面和企业应用程序通常都使用该框架来聚集集合项。本文将向您展示如何使用集合,同时利用 Java SE 6 中对该框架的增强。
Java语言是完全面向对象的,它的线程机制和对象序列化特别容易使用,使用Java来建立一套多线程服务器要比使用其它语言方便的多,如果你再把它的异常处理机制利用好,那么你就可以建立一个商业级的多线程服务器了。
您可以用 Java 平台提供的协作中断机制来构造灵活的取消策略。各活动可以自行决定它们是可取消的还是不可取消的,以及如何对中断作出响应,如果立即返回会危害应用程序完整性的话,它们还可以推迟中断。
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。
Lock 框架是同步的兼容替代品,它提供了 synchronized 没有提供的许多特性,它的实现在争用下提供了更好的性能。但是,这些明显存在的好处,还不足以成为用 ReentrantLock 代替 synchronized 的理由。
在这篇介绍适用于 Java 程序员的 CSP 的文章中,介绍了许多基础知识。包括Java 语言目前支持的多线程编程的构造。还解释了这些构造的起源,讨论了它们与 Java 平台多线程编程的 4 个常见缺陷(争用风险、死锁、活动锁和资源耗尽)之间的关系。
Java? 5.0 第一次让使用 Java 语言开发非阻塞算法成为可能,java.util.concurrent 包充分地利用了这个功能。非阻塞算法属于并发算法,它们可以安全地派生它们的线程,不通过锁定派生,而是通过低级的原子性的硬件原生形式 —— 例如比较和交换。
模仿对象(Mock object)是为起中介者作用的对象编写单元测试的有用方法。测试对象调用模仿域对象(它只断言以正确的次序用期望的参数调用了正确的方法),而不是调用 实际域对象。
在 JDK 5.0 之前,如果不使用本机代码,就不能用 Java 语言编写无等待、无锁定的算法。在 java.util.concurrent 中添加原子变量类之后,这种情况发生了变化。
不变对象对于编写线程安全的软件来说非常有帮助。在 Java? 语言中,保证不变性的主要机制是使用 final 字段。但 final 字段必须在构造函数中设置,而在一些情况中,这一要求未免太过局限。
许多程序员在使用 Java 语言编写 Internet 客户程序时并没有考虑这个问题,主要是因为在以前只有一种选择――阻塞通信。但是现在 Java 程序员有了新的选择,因此我们编写的每个客户程序也许都应该考虑一下。