|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?java的做法是intc=Math.abs(-166);而ruby的做法是:c=-166.abs。呵呵,这就看出了java与ruby的区别。
当CPU进进多核时期以后,并行编程将加倍盛行,可是编写并路程序更简单堕落。在开辟过程当中,工程师能注重到统一个程序在单线程运转时是准确的,但是在多线程时,它会有大概堕落。和并行相干的毛病的发生缘故原由一般都十分隐晦,并且在一次测试中,它们的呈现与否具有很强的随机性。因为程序中多个线程之间大概以恣意的体例交织实行,即便一个并路程序准确的运转了成百上千次,下一次运转仍旧大概呈现新的毛病。
Multi-ThreadRun-timeAnalysisTool是由IBM为多线程Java程序开辟的运转时剖析工具,它可用于剖析并查找Java代码中的一些不简单发明的潜伏并路程序毛病,好比数据合作(DataRace)和逝世锁(Deadlock),从而进步并行程序的代码质量。本文将先容检测Java程序中随机并行毛病的一种新工具(http://alphaworks.ibm.com/tech/mtrat),反省Java代码中的潜伏的并路程序毛病,从而进步代码的平安性和不乱性,并演示其关于潜伏而并未产生的毛病的开掘才能。
概述
Java编程言语为编写多线程使用程序供应壮大的言语撑持。可是,编写有效的、没有毛病的多线程程序仍旧对照坚苦。编程言语中线程面对良多应战。在这些应战中,最次要的就是编程庞大度的进步。这些编程庞大度是由同步共享变量的会见,潜伏的依附于时序的毛病和调试和优化并路程序的庞大性酿成的。
MTRAT只以是把分歧的手艺集成到了一个单一的开辟工具中,是为了掩饰工具外部的庞大性,并使得MTRAT便利利用。MTRAT次要由以下部分构成,
复杂的命令行界面和Eclipse插件。输入MTRAT反省到的并行毛病。
静态的Java字节码修正引擎。能够在Java类文件被Java假造机加载的时分,修正Java类。
程序运转时信息搜集器。搜集程序的静态信息,好比内存会见,线程同步,创立和停止。
高效的运转时剖析引擎。搜集到的运转时信息会被在线剖析,假如发明潜伏的并行毛病,将会经由过程界面呈报给用户。
检测数据合作
在并路程序中,当两个并行的线程,在没有任何束缚的情形下,会见一个共享变量大概共享对象的一个域,并且最少要有一个操纵是写操纵,就会产生数据合作毛病。MTRAT最壮大的功效就是发明并路程序中潜伏的数据合作毛病。鄙人边的Java程序就埋没了一个潜伏的数据合作毛病。
packagesample;
classValue
{
privateintx;
publicValue()
{
x=0;
}
publicsynchronizedvoidadd(Valuev)
{
x=x+v.get();
}
publicintget(){returnx;}
}
classTaskextendsThread
{
Valuev1,v2;
publicTask(Valuev1,Valuev2)
{
this.v1=v1;
this.v2=v2;
}
publicvoidrun(){v1.add(v2);}
}
publicclassDataRace
{
publicstaticvoidmain(String[]args)throwsInterruptedException
{
Valuev1=newValue();
Valuev2=newValue();
Threadt1=newTask(v1,v2);
Threadt2=newTask(v2,v1);
t1.start();
t2.start();
t1.join();
t2.join();
}
}
<p>
他们对jsp,servlet,javabean进行封装就是为了展示他们的某个思想,与java的开发并没有必然的关系,也不见得在所以情况下,别人使用起来会简单。 |
|