Java编程语言如何验证自己的问题所在呢?这些问题需要我们不断的学习相关语言语法,下面我们就来仔细的研究一下有关Java编程语言容易发生的问题。希望大家在以后的使用中注意。
一般来说,很难按照普通的规范对 Java编程语言的多线程程序进行验证。同样,开发自动化工具对于常见的并发问题(例如死锁、活动锁和资源耗尽)进行完整而简单的分析也不太容易——特别是在任意 Java编程语言程序中或者在缺乏并发的正式模型的时候。
更糟的是,并发性问题出了名的变化多端、难于跟踪。每个 Java 开发人员都曾经听说过(或者亲自编写过)这样的 Java 程序:经过严格分析,而且正常运行了相当一段时间,没有表现出潜在的死锁。然后突然有一天,问题发生了,结果弄得开发团队经历许多的不眠之夜来试图发现并修补根本原因。#t#
一方面,多线程 Java编程语言程序容易发生的错误非常不明显,有可能在任意什么时候发生。另一方面,完全有可能这些 bug 在程序中从不出现。问题取决于一些不可知的因素。多线程程序的复杂本质,使得人们很难有效地对其进行验证。没有一套现成的规则可以找出多线程代码中的这类问题,也无法确切地证明这些问题不存在,这些导致许多 Java编程语言 开发人员完全避开多线程应用程序的设计和开发,即使用并发和并行的方式对系统进行建模会非常棒,他们也不使用多线程。
确实想进行多线程编程的开发人员通常准备好了以下一个或两个解决方案(至少是一部分):
长时间艰苦地测试代码,找出所有出现的并发性问题,诚心地希望到应用程序真正运行地时候已经发现并修复了所有这类问题。
大量运行设计模式和为多线程编程建立的指导原则。但是,这类指导原则只在整个系统都按照它们的规范设计的时候才有效,没有设计规则能够覆盖所有类型的系统。
虽然知道的人不多,但是对于编写(然后验证)正确的多线程应用程序这一问题,还有第三个选项。使用称为通信顺序进程( Communicating Sequential Processes,CSP)的精确的线程同步的数学理论,可以在设计时***地处理死锁和活动锁之类的问题。CSP 由 C.A.R. Hoare 与 20 世纪 70 年代后期设计,CSP 提供了有效的方法,证明用它的构造和工具构建的系统可以免除并发的常见问题。
在这份面向 Java编程语言 程序员的 CSP 全面介绍中,我把重点放在克服多线程应用程序开发常见问题的***步上,即了解这些问题。我介绍了 Java编程语言 平台上目前支持的多线程编程构造,解释了它们的起源,讨论了这类程序可能会有的问题。我还解释了用正式理论在任意的、大型的和复杂的应用程序中清除这些问题(即竞争冒险、死锁、活动锁和资源耗尽)或者证明这些问题不存在的困难。