 |
 |
 |
 |
 |
 |
Java 程序中的多线程 由于在语言级提供了线程支持,在 Java 语言中使用多线程要远比在 C 或 C++ 中来得简单。本文通过简单的程序示例展现了在 Java 程序中线程编程的简单性。在学习完本文后,用户应该能够编写简单、多线程的程序。 |
|
|
|
2000年3月26日 |
|
| |
如果我是国王:关于解决 Java 编程语言线程问题的建议 Allen Holub 指出,Java 编程语言的线程模型可能是此语言中最薄弱的部分。它完全不适合实际复杂程序的要求,而且也完全不是面向对象的。本文建议对 Java 语言进行重大修改和补充,以解决这些问题。 |
|
|
|
2000年10月19日 |
|
| |
编写高效的线程安全(thread-safe)类 在语言级别支持对象的锁定和线程内信号机制使得编写线程安全的类变得简单。在这里,通过简单的程序示例描述了在 Java 中强大和独具一格的线程安全和高效类的开发。 |
|
|
|
2001年1月4日 |
|
| |
编写多线程的 Java 应用程序 如何避免当前编程中最常见的问题 Java Thread API 允许程序员编写具有多处理机制优点的应用程序,在后台处理任务的同时保持用户所需的交互感。Alex Roetter 介绍了 Java Thread API,并概述多线程可能引起的问题以及常见问题的解决方案。 |
|
|
|
2001年4月5日 |
|
| |
诊断 Java 代码: 诊断 Java 代码:孤线程(Orphaned Thread)错误模式 在多线程代码中,使用驱动其它线程所负责的动作的单个主线程是常见的。这个主线程发送消息,通常是通过把它们放到一个队列中,然后其它线程处理这些消息。但是如果主线程抛出一个异常,那么剩余的线程会继续运行,等待更多输入到该队列,导致程序冻结。在诊断 Java 代码的这一部分中,专职 Java 开发者兼兼职捉虫者 Eric Allen 讨论检测、修复和避免这一错误模式。请在讨论论坛与作者和其他读者共享您关于本文的心得。 |
|
|
|
2001年8月11日 |
|
| |
轻松使用线程: 同步不是敌人 与许多其它的编程语言不同,Java 语言规范包括对线程和并发的明确支持。语言本身支持并发,这使得指定和管理共享数据的约束以及跨线程操作的计时变得更简单,但是这没有使得并发编程的复杂性更易于理解。这个三部分的系列文章的目的在于帮助程序员理解用 Java 语言进行多线程编程的一些主要问题,特别是线程安全对 Java 程序性能的影响。 |
|
|
|
2001年8月24日 |
|
| |
轻松使用线程: 不共享有时是最好的 ThreadLocal 类是悄悄地出现在 Java 平台版本 1.2 中的。虽然 ThreadLocal 极少受到关注,但对简化线程安全并发程序的开发来说,它却是很方便的。在轻松使用线程的第 3 部分中,Java 软件顾问 Brian Goetz 研究了 ThreadLocal 并提供了一些使用技巧。 |
|
|
|
2001年10月1日 |
|
| |
轻松使用线程: 减少争用 抛开您自己的习惯,提高应用程序的性能 在本系列的第 1 部分,我们讨论了无争用同步的性能开销。尽管常常听说同步方法调用的开销是非同步方法调用开销的 50 倍,这个数字实际上仍然相当容易产生误导。JVM 的每个后继版本在整体性能上的提高和无争用同步代价的降低使得无争用同步开销问题不再显得那么突出。但争用同步的代价仍然非常高昂。而且,严重的争用将严重损害应用程序的可伸缩性 ― 随着负载的增加,存在严重争用同步的应用程序的性能将显著降低。本文将探讨能够减少争用的几种技术,以提高您程序的可伸缩性。 |
|
|
|
2001年11月14日 |
|
| |
使您轻松地进行多线程应用程序编程
生产者-消费者方案是多线程应用程序开发中最常用的构造之一 ― 因此困难也在于此。因为在一个应用程序中可以多次重复生产者-消费者行为,其代码也可以如此。软件开发人员 Ze'ev Bubis 和 Saffi Hartal 创建了 Consumer 类,该类通过在一些多线程应用程序中促进代码重用以及简化代码调试和维护来解决这个问题
|
|
|
|
2002年5月10日 |
|
| |
使用JAVA建立稳定的多线程服务器 本文详细的介绍了使用Java语言建立一套多线程服务器的过程,该服务器使用对象传递消息,在线程中使用队列机制,使服务器的性能大大提高了。这套服务器可以被用于各种C/S或B/S结构的应用程序中。 |
|
|
|
2002年7月12日 |
|
| |
线程池的介绍及简单实现 服务器程序利用线程技术响应客户请求已经司空见惯,可能您认为这样做效率已经很高,但您有没有想过优化一下使用线程的方法。该文章将向您介绍服务器程序如何利用线程池来优化性能并提供一个简单的线程池实现。 |
|
|
|
2002年8月23日 |
|
| |
Java 理论与实践:线程池与工作队列 几乎在每个服务器应用程序中都会出现线程池和工作队列问题。本文中,Brian Goetz 探讨了线程池的动机、一些基本实现和调优技术以及一些要避免的常见危险。 |
|
|
|
2002年10月15日 |
|
| |
Java 理论与实践:嗨,我的线程到哪里去了?
如果您不小心,线程可能会在没有(堆栈)跟踪的情况下从服务器应用程序中消失。在本文中,线程问题专家 Brian Goetz 提供了用于预防和检测线程“擅离职守”的技术。 |
|
|
|
2002年12月10日 |
|
| |
Java 理论与实践: 描绘线程安全性 7 月份我们的并发专家 Brian Goetz 将 Hashtable 和 Vector 类描述为“有条件线程安全的”。一个类难道不是线程安全就是线程不安全的吗?不幸的是,线程安全并不是一个非真即假的命题,它的定义出人意料的困难。但是,正如 Brian 在本月的 Java 理论与实践中解释的,尽量在 Javadoc 中对类的线程安全性进行归类是非常重要的。 |
|
|
|
2003年11月3日 |
|
| |
基于事件的NIO多线程服务器 JDK1.4提供的无阻塞I/O(NIO)有效解决了多线程服务器存在的线程开销问题,但在使用上略显得复杂一些。许多基于NIO的多线程服务器程序往往直接基于选择器(Selector)的Reactor模式实现。这种简单的事件机制对于较复杂的服务器应用,显然缺乏扩展性和可维护性, 而且缺乏直观清晰的结构层次。本文将通过一个基于事件回调的NIO多线程服务器的设计,试图提供一个简洁、直观、易于扩展的NIO多线程服务器模型。 |
|
|
|
2004年4月1日 |
|
| |
多线程、多平台环境中的跟踪 大多数 Java 程序员都使用某种跟踪系统来跟踪开发中的代码的潜在错误和问题。然而,多线程和多平台环境可能产生大量莫名其妙的跟踪数据。在本文中,软件工程师 Daniel Would 提供了一些技巧,帮助您理解复杂应用程序中产生的跟踪数据。您将了解如何使用开放源代码的日志记录软件包 log4j 来生成包含丰富信息的日志文件。您还将看到如何使用标准 UNIX shell 命令来挖掘您需要的信息数据。 |
|
|
|
2004年4月8日 |
|
| |
驯服 Tiger: 线程中的默认异常处理 跟踪无法预期的运行时异常可能是一件又慢又费力的事情,只获得默认线程名称和堆栈跟踪通常是不够的。在驯服 Tiger 这一期专栏中,Java 开发人员 John Zukowski 向您展示了如何通过替代默认行为来定制输出。他还对比了通过细分 ThreadGroup 定制输出的老方法与通过提供自己的 UncaughtExceptionHandler 定制输出的新方法。 |
|
|
|
2004年8月26日 |
|
| |
Java5 多线程实践 Java5增加了新的类库并发集java.util.concurrent,该类库为并发程序提供了丰富的API多线程编程在Java 5中更加容易,灵活。本文通过一个网络服务器模型,来实践Java5的多线程编程,该模型中使用了Java5中的线程池,阻塞队列,可重入锁等,还实践了Callable, Future等接口,并使用了Java 5的另外一个新特性泛型。 |
|
|
|
2006年1月23日 |
|
| |
使用 ConTest 进行多线程单元测试 众所周知并行程序设计易于产生 bug。更为严重的是,往往在开发过程的晚期当这些并行 bug 引起严重的损害时才能发现它们并且难于调试它们。即使彻底地对它们进行了调试,常规的单元测试实践也很可能遗漏并行 bug。在本文中,并行专家 Shmuel Ur 和 Yarden Nir-Buchbinder 解释了为什么并行 bug 如此难于捕获并且介绍了 IBM Research 的一种新的解决方案。 |
|
|
|
2006年5月11日 |
|
| |
实现 Java 多线程并发控制框架 Java 多线程是提高程序效能的利器,本文并不是告诉您如何编写多线程 Java 程序,而着重于多线程的并发控制以及如何描述线程执行的过程。当您需要完全掌控 Java 多线程执行的过程时,本文将会对您有所帮助。 |
|
|
|
2006年8月14日 |
|
| |
IBM WebSphere 开发者技术期刊: 使用 WebSphere Application Server 开发高性能 J2EE 线程 异步 Bean 提供可以由多个应用程序使用的有效而又安全的全局线程池。您需要使用专门的线程池时,可以通过 IBM WebSphere Application Server V5.x 或 V6.x 使用 Asynchronous Beans EventSource 接口构造一个线程工厂,从而能够自由使用任何必需的高级线程用法模式,并且不降低性能。 |
|
|
|
2006年9月17日 |
|
| |
实时 Java,第 3 部分: 线程化和同步 本文是关于实时 Java 系列文章(共 5 部分)的第三篇,考察了 Java 实时规范(RTSJ)的实现必须支持的线程化和同步问题。您还将了解开发和部署实时应用程序时必须牢记的一些有关这两方面的基本考虑。 |
|
|
|
2007年5月24日 |
|
| |
基于 Java 2 运行时安全模型的线程协作 Java 2 的运行时安全模型是基于策略和堆栈授权的安全模型。Java 使用存取控制器(AccessController)为用户主机上的大部分关键资源(如文件,套接字等)提供运行时保护,并且允许管理员为具体的应用定制安全策略文件。本文将讨论在多线程的环境下,如何使用 Java 提供的安全特性构建线程间安全协作的 Java 应用。 |
|
|
|
2009年9月18日 |
|
| |
使用 Java Debug Interface(JDI)调试多线程应用程序 本文对 Java Debug Interface(JDI)及其使用进行了介绍,并通过实现一个多线程分析器的示例应用,演示了如何利用 JDI 开发自己的多线程调试程序。该示例分析器在独立于目标程序的前提下,以单个线程流为单位,帮助追踪记录多线程的执行过程信息。 |
|
|
|
2009年10月9日 |
|
| |
java线程简介
本教程研究了线程的基础知识 ― 线程是什么、线程为什么有用以及怎么开始编写使用线程的简单程序。
我们还将研究更复杂的、使用线程的应用程序的基本构件 ― 如何在线程之间交换数据、如何控制线程以及线程如何互相通信。
|
|
|
|
2003年3月7日 |
|
| |
以一个固定、全局次序获取多个锁 当两个或多个线程在互相等待时被阻塞就发生了死锁。死锁是在多线程代码中最难解决的问题。要解决它,就必须以一个固定、全局次序获取多个锁。 |
|
|
|
2000年12月15日 |
|
| |
Jive talkin':开放源码的 Java 软件论坛 Jive 是一个开放源码的 Java 软件论坛,它允许在网站上进行线程化的讨论。它提供了性能优秀的用户定义的 JSP 文件(用 Jive 的外壳)来完全改变论坛的外观、形象和功能。并提供了一个可植入的 API, 这些 API 提供诸如及时翻译、内容过滤或者几乎其它所有功能的先进特性。然而除此之外还有很多的自由论坛, Jive 的独到之处是它的全部代码都用 Java 编写并且被一个专注的程序员群体热情的支持着。在这篇文章中,将讨论到如何将 Jive 结合到 lockerjock,一个有关运动题材的网站 |
|
|
|
2001年3月19日 |
|
| |
构建自己的基于 Java 的超级计算机 如果您曾想过构建自己的超级计算机,但却对用 C 语言进行并行编程望而生畏,那么伪远程线程可以帮您解决这一问题。这种获奖的 Java 编程模型极大地简化了集群上的并行编程,并使超级计算走出实验室,使每一位 Java 程序员都能使用它。 |
|
|
|
2001年5月25日 |
|
| |
基于JDBC的数据库连接池高效管理策略 在基于JDBC的数据库应用开发中,数据库连接的管理是一个难点,因为它是决定该应用性能的一个重要因素。本文在对数据库连接进行透彻分析的基础上,提出并实现了一个高效的连接管理策略,使得开发高性能的数据库应用变得相对容易。特别是,对于连接管理中的两个难点:事务和多线程问题进行了深入的剖析,并给出了一个基于设计模式的解决方案。 |
|
|
|
2002年3月12日 |
|
| |
最佳实践:避免或最小化 Servlet 中的同步 请将 servlet 中同步的使用最小化。因为 servlet 是多线程的,主要代码路径的同步会严重地且极为有害地影响性能。 |
|
|
|
2002年3月15日 |
|
| |
构建Java并发模型框架 Java的多线程特性为构建高性能的应用提供了极大的方便,但是也带来了不少的麻烦。线程间同步、数据一致性等烦琐的问题需要细心的考虑,一不小心就会出现一些微妙的,难以调试的错误。另外,应用逻辑和线程逻辑纠缠在一起,会导致程序的逻辑结构混乱,难以复用和维护。 |
|
|
|
2002年4月26日 |
|
| |
Java 理论和实践:安全构造技术 Java 语言提供了灵活的、看上去很简单的线程功能,使得您很容易在您的应用程序中使用多线程。然而,Java 应用程序中的并发编程比看上去要复杂:在 Java 程序中,有一些微妙(也许并不是那么微妙)方式会造成数据争用(data race)以及并发问题。在这篇 Java 理论和实践中,Brian 探讨了一个常见的线程方面的危险:在构造过程中,允许 this 引用逃脱(escape)。这个看上去没有什么危害的做法可以在 Java 程序中造成无法可预料和不期望的结果。 |
|
|
|
2002年8月13日 |
|
| |
修正Java中wait方法超时语意模糊性的方案 Java语言中内建了对于多线程的支持,并提供了对于wait方法超时语意的支持,同时也带来了这种语意的模糊性,本文将对这一问题进行剖析,并给出一个比较通用的解决方案。 |
|
|
|
2002年9月20日 |
|
| |
Java 理论与实践:并发在一定程度上使一切变得简单 对于每个项目,象许多其它应用程序基础结构服务一样,通常无需从头重新编写并发实用程序类(如工作队列和线程池)。这个月,Brian Goetz 将介绍 Doug Lea 的 util.concurrent 包,这是一个高质量的、广泛使用的、并发实用程序的开放源码包。
|
|
|
|
2003年4月10日 |
|
| |
Java 理论与实践:并发集合类 Doug Lea的util.concurrent包除了包含许多其他有用的并发构造块之外,还包含了一些主要集合类型List和Map的高性能的、线程安全的实现。在本月的Java理论与实践中,Brian Goetz向您展示了用ConcurrentHashMap替换Hashtable或synchronizedMap,将有多少并发程序获益。 |
|
|
|
2003年9月15日 |
|
| |
Java 理论与实践:构建一个更好的 HashMap ConcurrentHashMap 是 Doug Lea 的 util.concurrent 包的一部分,它提供比 Hashtable 或者 synchronizedMap 更高程度的并发性。而且,对于大多数成功的 get() 操作它会设法避免完全锁定,其结果就是使得并发应用程序有着非常好的吞吐量。这个月,Brian Goetz 仔细分析了 ConcurrentHashMap 的代码,并探讨 Doug Lea 是如何在不损失线程安全的情况下取得这么骄人成绩的。 |
|
|
|
2003年9月29日 |
|
| |
实现非阻塞套接字的一种简单方法 尽管 SSL 阻塞操作――当读写数据的时候套接字的访问被阻塞――与对应的非阻塞方式相比提供了更好的 I/O 错误通知,但是非阻塞操作允许调用的线程继续运行。本文中,作者同时就客户端和服务器端描述了如何使用 Java Secure Socket Extensions (JSSE) 和 Java NIO (新 I/O)库创建非阻塞的安全连接,并且介绍了创建非阻塞套接字的传统方法,以及使用 JSSE 和 NIO 的一种可选的(必需的)方法。 |
|
|
|
2003年11月13日 |
|
| |
Java单例对象同步问题探讨 本文将探讨一下在多线程环境下,使用单例对象作配置信息管理时可能会带来的几个同步问题,并针对每个问题给出可选的解决办法。 |
|
|
|
2003年12月8日 |
|
| |
驯服 Tiger: 并发集合 Doug Lea 最初编写的 util.concurrent 包变成了 JSR-166 ,然后又变成了 J2SE 平台的 Tiger 版本。这个新库提供的是并发程序中通常需要的一组实用程序。如果对于优化对集合的多线程访问有兴趣,那么您就找对地方了。 |
|
|
|
2004年7月1日 |
|
| |
驯服 Tiger: 虚拟机更新 在“驯服 Tiger”的这一期中,John Zukowski 介绍了最新的 Java 虚拟机如何改善启动时间、降低内存需求、提高性能。Tiger 提供了共享的数据档案文件、新的线程调度算法以及致命错误处理器(用来处理故障)。请在本文附带的讨论论坛上与作者和其他读者分享您对本文的想法。 |
|
|
|
2005年3月28日 |
|
| |
适用于 Java 程序员的 CSP,第 1 部分 虽然使用 Java 语言进行多线程应用程序编程并不难掌握,但是许多开发人员都在为了正确地应用它们而挣扎。结果,多线程程序要比我们想像的更容易发生细微的错误,这导致一些开发人员为了避免使用多线程而不惜代价,即使在并发和平行能够很明显地产生最好的设计的时候,他们也不采用多线程。在这篇由三部分组成的系列文章中,developerWorks 的定期投稿者 Abhijit Belapurkar 为您铺设了一条有助于克服对多线程编程恐惧、感受它的好处的道路。文章从多线程编程最常见问题的概述开始,这些问题包括:竞争冒险、死锁、活动锁、资源耗尽,等等。 |
|
|
|
2005年6月21日 |
|
| |
应用服务器内存泄露问题诊断一例 在中间件应用服务器的整体调优中,有关于等待队列、执行线程,EJB池以及数据库连接池和Statement Cache方面的调优,这些都属于系统参数方面的调优,本文主要从另外一个角度,也就是从应用的角度来解决中间件应用服务器的内存泄露问题,从这个角度来提高系统的稳定性和性能。 |
|
|
|
2005年9月6日 |
|
| |
使用 TestNG 的新特性管理实际项目中的大量单元测试 ̦随着项目的成长,单元测试的数量会迅猛增长。这就带来不少问题。首先数量巨大的单元测试难于管理,运行一遍耗时巨大。
其次,有时某个微小改动可能只需要运行某个测试文件中的部分单元测试就可以,这时重新运行全部测试用例就没有必要了。
其三,大多数项目需要用到多线程特性,为使用了多线程特性的代码写测试用例相当麻烦且容易出错。
本文将利用 TestNG 提供的新特性,解决以上提到的问题。
|
|
|
|
2005年10月19日 |
|
| |
Java 理论与实践: 非阻塞算法简介 Java 5.0 第一次让使用 Java 语言开发非阻塞算法成为可能,java.util.concurrent 包充分地利用了这个功能。非阻塞算法属于并发算法,它们可以安全地派生它们的线程,不通过锁定派生,而是通过低级的原子性的硬件原生形式 ―― 例如比较和交换。非阻塞算法的设计与实现极为困难,但是它们能够提供更好的吞吐率,对生存问题(例如死锁和优先级反转)也能提供更好的防御。在这期的 Java 理论与实践 中,并发性大师 Brian Goetz 演示了几种比较简单的非阻塞算法的工作方式。 |
|
|
|
2006年5月18日 |
|
| |
优化 Java 垃圾收集器改进系统性能 在系统的性能测试过程中,当系统的处理能力有某种变化趋势时, 除了关于等待队列、执行线程,EJB 池以及数据库连接池和 Statement Cache 方面的调优外,还要考虑到 Java 垃圾收集器(Garbage Collection,本文简称 GC)对系统性能的影响。本文介绍了如何分析系统的处理能力和 GC 之间的关系,以及如何通过改进 JVM 的配置来优化 GC,以提高系统的性能。 |
|
|
|
2006年11月30日 |
|
| |
实现一个不受约束的不变性模型 不变对象对于编写线程安全的软件来说非常有帮助。在 Java 语言中,保证不变性的主要机制是使用 final 字段。但 final 字段必须在构造函数中设置,而在一些情况中,这一要求未免太过局限。本文将介绍一种有效的实现方式,使用标准缓存字段来实现一个略微随意的不变性模型,该字段的值无需同步也能安全访问。 |
|
|
|
2007年3月14日 |
|
| |
认识 p-unit : 一款开源的性能测试工具 p-unit 是一款开放源码的性能测试框架,和 JUnit 不同,JUnit 关注的是测试案例的正确性,而 p-unit 不仅关注测试案例的正确性,还收集测试案例的性能参数,默认情况下,p-unit 收集测试案例的时间和内存消耗情况,可以产生文件,图片,和 PDF 格式的报表。此外,p-unit 还支持参数化测试,多线程测试以及不同 Java 虚拟机性能之间的比较。 |
|
|
|
2007年5月31日 |
|
| |
Java 理论与实践: 正确使用 Volatile 变量 Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。在这期的 Java 理论与实践中,Brian Goetz 将介绍几种正确使用 volatile 变量的模式,并针对其适用性限制提出一些建议。 |
|
|
|
2007年7月5日 |
|
| |
富客户机应用程序的性能,第 1 部分: 性能分析的工具、技术和技巧 即使是良好规划的应用程序也可能出现重大的性能问题。
在这篇由两个部分构成的文章里,Chris Grindstaff 给出了一些用于分析和解决性能问题的技术。这是第 1 部分,您将学到如何量度基于 Eclipse 的富客户机平台(Rich Client Platform (RCP))应用程序的性能,判断速度降低的原因是由于 CPU 还是 I/O 瓶颈,保持 UI 线程空闲以保持响应性。第 2 部分将解决内存问题。 |
|
|
|
2007年8月13日 |
|
| |
富客户机应用程序的性能,第 2 部分: 堵住内存泄漏 本文讨论 Eclipse 富客户机性能,由两部分构成,第 1 部分
涵盖了应用程序性能度量、记录技术、保持 UI 响应性以及使用 Job 避免线程错误等方面。
本部分作为第 2 部分要讨论内存使用以及如何发现内存泄漏。 |
|
|
|
2007年8月20日 |
|
| |
借助 Ajax 自动保存 JSF 表单: 第 2 部分 在 “借助 Ajax 自动保存 JSF 表单” 系列的第 1 部分中,作者兼
Java 开发人员 Andrei Cioroianu 为您展示了如何借助 Asynchronous JavaScript + XML(Ajax)和
JavaServer Faces(JSF)技术构建能自动保存 Web 表单的 Java 应用程序,介绍了如何用 JavaScript 和 XMLHttpRequest 获得、编码和提交表单数据,如何调整 JSF 请求生命周期来处理 Ajax 请求以及如何在服务器端从 JSF 组件树获取所提交的数据 。在这个包含三部分的系列文章的第 2 部分中,您将了解如何识别跨浏览器会话的匿名用户、如何为多个用户和页面管理自动保存的表单数据、如何选择数据存储库以及如何处理线程安全性问题。 |
|
|
|
2007年10月8日 |
|
| |
结合安全发布与有效的不可变性来提升性能 使多个线程能够共享对可变集合的访问 —— 一种典型方法就是同步对集合的访问 —— 这样做可能会成为性能瓶颈。通过本文学习一种可用于 Java 5.0 的技术,然后使用该技术最大限度地减少数据结构(频繁读取,但较少更新)中的性能瓶颈。 |
|
|
|
2007年10月29日 |
|
| |
IBM 的 Java 诊断,第 3 部分: 使用面向 Java 的 Lock Analyzer 诊断同步和锁问题 面向 Java 的 IBM 锁分析器可从 alphaWorks 获得,可对运行中的 Java 应用程序进行实时锁监视。锁争用会降低应用程序性能,该工具会突出显示发生锁争用的线程。 开发人员可以使用该信息修改其应用程序以减少锁争用,从而提高性能。本文介绍了面向 Java 的 IBM 锁分析器,介绍了其构建的基础架构并针对该工具的未来发展方向进行了思考。 |
|
|
|
2007年11月5日 |
|
| |
使用 Java 构造高可扩展应用 在本文中,我们将介绍提高 Java 多线程应用性能的一般步骤。 通过运用本文提供的一些简单规则,我们就能获得具有高性能的可扩展的应用程序。 |
|
|
|
2008年10月10日 |
|
| |
面向 Java 开发人员的 Scala 指南: 深入了解 Scala 并发性 对于许多(如果不是大多数)Java 程序员来说,Scala 的吸引力在于处理并发性以及编写线程安全的代码时非常轻松。在本期文章中,Ted Neward 将开始深入研究 Scala
语言及环境所提供的各种并发特性和库。 |
|
|
|
2009年7月10日 |
|
| |
如何聪明地使用锁 锁(lock)作为用于保护临界区(critical section)的一种机制,被广泛应用在多线程程序中。无论是 Java 自身带有的 synchronized 关键字,还是 java.util.concurrent 包中的 ReentrantLock 和 ReentrantReadWriteLock,都是多线程应用开发人员手中强有力的工具。 |
|
|
|
2009年7月10日 |
|
| |
Eclipse 并发编程 Jobs API 被广泛的应用到 Eclipse 平台中,Job 是 Eclipse 运行时重要的组成部分,它可以理解成被平台调用异步运行的代码块,多个 Jobs 可以并发执行。对于基于 Eclipse 平台开发并发应用的开发者来说,Eclipse 提供的 Job 框架很好地替代了 Java 原生的 Thread, 其内在使用了线程池实现,具有更好的伸缩性,更好的性能等。不过问题是,在运行时安全方面,现有的 Eclipse Job 框架并不能保证线程间的安全协作,不能在 Job 运行时检查 Job 创建者的权限。本文所要讨论的就是 Eclipse Job 的运行时安全问题,并提供相应的解决方案。 |
|
|
|
2009年10月30日 |
|
| |
构建定制的树型视图 在这篇免费的 dW 专有的独家教程中,讲述了关于 Swing 树型视图的概念、它们所显示的内容、如何设置它们以及如何定制它们。它还讲述了使用线程来执行长时间运行任务的概念,这样用户界面就可以保持迅速反应。研究 Java Swing 树的相关类,演示了如何定制基本数据模型和树节点的绘制。为说明这些概念,我们将生成一个增强型 JTree,JMagnitudeTree。这个增强型 JTree 可以显示树节点的相对数量,以及标准节点名称和整个树型结构。例如,如果树显示的是文件目录结构,那么它可以指出所有文件和目录的相对大小。本教程并不试图充当编程参考,因此合适的 Swing 参考资料或在线文档也许会有帮助。 |
|
|
|
2001年3月30日 |
|
| |
Java 集合框架 本教程将带您漫游 “Java 集合框架”(Java Collection Framework)。为了尽快开始学习“集合框架”,教程从一些面向初学者和专家等读者的简单编程示例入手。接着,教程继续讨论集(set)和映射(map),它们的属性以及它们数学上的定义与“集合框架”中的 Set、 Map 和 Collection 定义有何不同。“Java 集合框架”的历史那一节澄清了集和映射相关类的一些混淆。本教程彻底介绍了“集合框架”中所有的接口和实现这些接口的类。本教程不仅谈到了用线程安全和只读方式处理集合,还探讨了集合的算法支持。此外,教程还讨论了在 JDK 1.1 中使用“集合框架”的一个子集。最后,教程以先于“Java 集合框架”的 ObjectSpace 中一种广泛使用的算法和数据结构库 JGL 的介绍作为结束。 |
|
|
|
2002年1月8日 |
|
| |
双重检查锁定及单例模式 所有的编程语言都有一些共用的习语。了解和使用一些习语很有用,程序员们花费宝贵的时间来创建、学习和实现这些习语。问题是,稍后经过证明,一些习语并不完全如其所声称的那样,或者仅仅是与描述的功能不符。Java 编程语言也不例外,其中的双重检查锁定就是这样的一个绝不应该使用的习语。在本文中,Peter Haggar 介绍了双重检查锁定习语的渊源,开发它的原因和它失效的原因。 |
|
|
|
2004年5月1日 |
|
| |
不仅仅是另一本并发性图书 如果以前没有购买 Java Concurrency in Practice(Goetz 等,Addison-Wesley,2006 年),那么现在该购买了。经验丰富的 Java 开发人员(和流行书作者)Sing Li 介绍了为什么即使并发性还没进入您的日常开发,也应当阅读这本重要的图书。该书由 developerWorks 的长期作者和并发性专家 Goetz 执笔。 |
|
|
|
2006年8月14日 |
|
| |
方便 Ajax 与 Java EE 的集成 随着 Ajax 的兴起,对于消解这个热门技术的谜团并有针对性地处理在它的使用中出现的问题的需求出现了。高级 IT 专家 Patrick Gan 利用这个机会,研究了在 Java EE Web 应用程序中引入 Ajax 对整个开发生命周期可能产生的影响。对采纳 Ajax 基于异步通信的模式会存在的问题保持清醒,有助于踏上有效集成 Ajax 的正确道路。
|
|
|
|
2006年8月17日 |
|
| |
实时 Java,第 6 部分: 简化实时 Java 开发 由于实时 Java 虚拟机支持作用域内存,因此为作用域内存使用定义通用模式可以提高开发人员的生产力。这些模式通过降低作用域核心功能的复杂性,减少了了解和直接使用作用域的需求。本文是实时 Java 系列文章的第 6 篇(也是最后一篇),文中将引入 Lifecycle Memory Managed Periodic Worker Threads 模式作为简化实时 Java 开发的模型。通过一个示例实现和简单的示例应用程序论证了该模式的可行性。
|
|
|
|
2007年8月13日 |
|
| |
JDK 7 中的 Fork/Join 模式 随着多核时代的来临,软件开发人员不得不开始关注并行编程领域。而 JDK 7 中将会加入的 Fork/Join 模式是处理并行编程的一个经典的方法。虽然不能解决所有的问题,但是在它的适用范围之内,能够轻松的利用多个 CPU 提供的计算资源来协作完成一个复杂的计算任务。通过利用 Fork/Join 模式,我们能够更加顺畅的过渡到多核的时代。本文将介绍使用 JDK 7 中 Fork/Join 模式的方法和其他相关改进。阅读本文之后,读者将能够独立地在软件开发中使用 Fork/Join 模式来改进程序的性能。 |
|
|
|
2007年8月23日 |
|
| |
Java 理论与实践: 应用 fork-join 框架 Java 7 的 java.util.concurrent 包的新增功能之一是一个 fork-join 风格的并行分解框架。fork-join 概念提供了一种分解多个算法的自然机制,可以有效地应用硬件并行性。 |
|
|
|
2007年12月3日 |
|
| |
Rope:理论与实践 Java 语言默认的 String 和 StringBuilder 类很难支撑起操纵大量字符串的系统。rope 数据结构可能是更好的替代品。这篇文章介绍 Ropes for Java,这是针对 Java 平台的 rope 实现;本文还将研究性能问题,并提供一些有效使用 rope 库的指导。 |
|
|
|
2008年3月11日 |
|
| |
Java 理论与实践: 应用 fork-join 框架,第 2 部分 Java 7 中的 java.util.concurrent 包的新增功能之一是一个用于 fork-join 风格的并行分解的库。在本系列的第 1 部分中,Brian Goetz 演示了 fork-join 如何为众多的算法提供一种自然的分解机制,以有效地利用硬件的并行性。在本文中,他将介绍 ParallelArray 类,这个类简化了内存中数据结构上的并行排序和搜索操作。 |
|
|
|
2008年4月15日 |
|
| |
使用泛型和并发改善集合 Java Collections Framework 是 Java 平台的一个重要部分。桌面和企业应用程序通常都使用该框架来聚集集合项。本文将向您展示如何使用集合,同时利用 Java SE 6 中对该框架的增强。通过使用泛型和并发功能使您的应用程序具有更好的维护性和可伸缩性,您可以实现比 HashMap 或 TreeSet 更丰富的功能。 |
|
|
|
2008年6月2日 |
|
| |
健壮的 Java 基准测试,第 2 部分: 统计和解决方案 程序性能一直是受到关注的问题,即使在现在这样的高性能硬件时代,也是如此。本文是分两部分的文章系列的第二篇,讨论基准测试的统计问题并提供一个框架,可以用这个框架对各种 Java 代码进行基准测试,包括自我包含的微基准测试和调用整个应用程序的代码等等。 |
|
|
|
2008年7月9日 |
|
| |
Java 下实现锁无关数据结构 本文将介绍锁无关数据结构的应用及其相关概念,并在 Java 环境下利用 JDK 1.5 提供的一组类进行锁无关数据结构设计,从而避免基于锁的数据结构可能引发的同步问题,以改善程序的可靠性。 |
|
|
|
2008年7月18日 |
|
| |
自动检测并行 Java 程序中的错误 并行程序的不确定性造成并行程序的错误很难查找,重现和调试。MTRAT 可以收集程序的运行时信息,在线分析程序中所有可能的并行程序错误。 |
|
|
|
2008年10月17日 |
|
| |
扩展 JUnit 测试并行程序 TDD(Test Driven Development)早已成为被广泛使用的敏捷实践。JUnit 是 Java 程序员进行单元测试的标准工具,但是它对于并行程序还没有任何的支持。本文将介绍一种对 JUnit 框架的扩展,从而使得并行程序的测试变得如同串行程序一样简单。 |
|
|
|
2008年12月19日 |
|
| |
利用 Java dump 进行 JVM 故障诊断 本文将向读者介绍利用 Java dump 诊断 JVM Crash 和 CPU 饥饿等问题的方法和技巧,以便使用户更加全面的了解 Java dump 在故障诊断过程中的作用。 |
|
|
|
2009年3月11日 |
|
| |
使用实时 Java 进行开发,第 1 部分: 探索实时 Java 的独特功能 实时 Java 融合了使用 Java 语言编程的简单性与必须遵从实时约束的应用程序所需的性能。对 Java 语言的扩展为实时环境提供了传统 Java 运行时环境所不具备的特性。本文是一个 3 部分系列中的第一篇,描述一些特性并解释如何应用它们来在您自己的应用程序中实现实时性能。 |
|
|
|
2009年10月16日 |
|
| |
实战 Groovy: SwingBuilder 和 Twitter API,第 1 部分 在这一期 “实战 Groovy” 中,Scott Davis 要讨论一个令大多数服务器端 Java 开发人员畏惧的主题:Swing。Groovy 的 SwingBuilder 可以让这个强大但复杂的 GUI 框架使用起来简单一些。 |
|
|
|
2009年11月17日 |
|
| |
Java和C/C++程序实时通讯数据移植问题的研究 摘要:本文研究了数据存储格式中大尾小尾问题,根据此原理解决了Java程序和C/C++通讯及读取服务器端文件时的数据移植问题。 |
|
|
|
2001年5月11日 |
|
| |
Java实时多任务调度过程中的安全监控设计 在一系列关联的多任务的实时环境中,如果有一个任务发生失败,可能导致所有任务产生连锁反应,从而造成调度失控的局面。特别是对于核心控制设备尤其重要,为了解决这个问题,必须对每个任务进行实时监控。 |
|
|
|
2002年12月3日 |
|
| |
适用于 Java 程序员的 CSP ,第 3 部分 Abhijit Belapurkar 通过介绍 JCSP 开发高级主题,结束了由三部分组成的介绍适用于 Java 开发人员的 CSP 的系列文章,介绍的内容包括:JCSP 与 AOP 的相似性、JCSP 与 java.util.concurrent 的比较,以及用 JCSP 进行高级同步。 |
|
|
|
2005年7月11日 |
|
| |
适用于 Java 程序员的 CSP ,第 2 部分:用 JCSP 进行并发编程 本文中作者将介绍如何使用基于 Java 的 JCSP 库来编写能够确保没有并发问题(例如争用风险、 死锁、活动锁、资源耗尽)的 Java 应用程序。 |
|
|
|
2005年7月11日 |
|
| |
Java 理论与实践: 处理 InterruptedException Java 语言的很多方法,例如 Thread.sleep() 和 Object.wait(),都可以抛出 InterruptedException。这个异常是不能忽略的,因为它是一个检查异常(checked exception)。但是应该如何处理它呢?在本月的 “Java 理论与实践” 中,并发专家 Brian
Goetz 将解释 InterruptedException 的含义,为什么抛出 InterruptedException,以及在捕捉到该异常时应该怎么做。
|
|
|
|
2006年6月15日 |
|
| |
探索 Java 同步机制 本文从典型的 Monitor Object 设计模式入手,从一个新的视角,来探讨 Java 语言的同步机制。 |
|
|
|
2008年12月26日 |
|
| |
事务策略: 高并发策略 事务策略系列文章的作者 Mark Richards 将讨论如何在 Java 平台中为具有高吞吐量和高用户并发性需求的应用程序实现事务策略。理解如何进行折衷将帮助您确保高水平的数据完整性和一致性,并减少随后开发流程中的重构工作。 |
|
|
|
2009年7月31日 |
|
| |
JDK 5.0 中的并发
本教程将介绍 JDK 5.0 提供的用于并发的新实用程序类,并通过与现有并发原语(synchronized、wait() 和 notify())相比较,说明这些类如何提高了可伸缩性。
|
|
|
|
2004年12月6日 |
|
| |