|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
什么时候上述的三种开发工具能和三为一,什么时候java的竞争力才更强,才有机会拉拢更多的程序员投入到对java的开发上,因为到时的开发工具将会比.net网页编程的更简单。还有一点也很关键,什么时候java推出的jsf能成为真正意义上的标准。
并路程序易于发生bug不是甚么奥密。编写这类程序是一种应战,而且在编程过程当中悄然发生的bug不简单被发明。很多并行bug只要在体系测试、功效测试时才干被发明或由用户发明。到当时修复它们必要奋发的用度--假定可以修复它们--由于它们是云云难于调试。
在本文中,我们先容了ConTest,一种用于测试、调试和丈量并路程序局限的工具。正如您将很快看到的,ConTest不是单位测试的代替者,但它是处置并路程序的单位测试妨碍的一种增补手艺。
为何单位测试还不敷
当问任何Java™开辟者时,他们城市告知您单位测试是一种好的理论。在单位测试上做得当的投进,随后将失掉报答。经由过程单位测试,能较早地发明bug而且能比不举行单位测试更简单地修复它们。可是一般的单位测试办法(即使当完全地举行了测试时)在查找并行bug方面不是很无效。这就是为何它们能逃到程序的早期。
为何单位测试常常漏掉并行bug?一般的说法是并路程序(和bug)的问题在于它们的不断定性。可是关于单位测试目标而言,荒唐性在于并路程序长短常断定的。上面的两个示例注释了这一点。
无润色的NamePrinter
第一个例子是一个类,该类除打印由两部分组成的名字之外,甚么也不做。出于教授教养目标,我们把此义务分在三个线程中:一个线程打印人名,一个线程打印空格,一个线程打印姓和一个新行。一个包含对锁举行同步和挪用wait()和notifyAll()的成熟的同步协定能包管一切事变以准确的顺序产生。正如您在清单1中看到的,main()充任单位测试,用名字"WashingtonIrving"挪用此类:
清单1.NamePrinter
public class NamePrinter {
private final String firstName;
private final String surName;
private final Object lock = new Object();
private boolean printedFirstName = false;
private boolean spaceRequested = false;
public NamePrinter(String firstName, String surName) {
this.firstName = firstName;
this.surName = surName;
}
public void print() {
new FirstNamePrinter().start();
new SpacePrinter().start();
new SurnamePrinter().start();
}
private class FirstNamePrinter extends Thread {
public void run() {
try {
synchronized (lock) {
while (firstName == null) {
lock.wait();
}
System.out.print(firstName);
printedFirstName = true;
spaceRequested = true;
lock.notifyAll();
}
} catch (InterruptedException e) {
assert (false);
}
}
}
private class SpacePrinter extends Thread {
public void run() {
try {
synchronized (lock) {
while ( ! spaceRequested) {
lock.wait();
}
System.out.print( );
spaceRequested = false;
lock.notifyAll();
}
} catch (InterruptedException e) {
assert (false);
}
}
}
private class SurnamePrinter extends Thread {
public void run() {
try {
synchronized(lock) {
while ( ! printedFirstName || spaceRequested || surName == null) {
lock.wait();
}
System.out.println(surName);
}
} catch (InterruptedException e) {
assert (false);
}
}
}
public static void main(String[] args) {
System.out.println();
new NamePrinter("Washington", "Irving").print();
}
}
<p>
在性能方面,在windows平台下,.net网页编程可能是占强项,要是把.net网页编程放在sun开发的操作系统上去运行呢?根本就运行不了,.net网页编程对其它操作系统的支持也很弱,性能也可能比不上java。 |
|