|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net网页编程就不一样了,保持微软的一向风格,源代码不公开
固然我们不想创立在没法预期时抛出运转时非常的程序,但这类情形仍是会产生——特别是第一次运转庞大程序时。一般是利用默许举动、打印仓库溢出和停止线程的性命来处置这些非常。
从那里发明默许举动?每一个线程都属于一个由java.lang.ThreadGroup类暗示的线程组。望文生义,线程组同意您将线程组合在一同。您多是为了便利而将线程组合,比方,一个线程池中的一切线程都属于组X,而另外一个池的一切线程则属于组Y,大概是为了会见把持而将线程举行组合。组X中的线程无权会见或改动组Y中的线程,除非它们都在统一线程组内(或在一个子组内)。
在Tiger之前,ThreadGroup类供应了一种处置未捕捉非常的办法:ThreadGroup的uncaughtException()办法。假如非常不是ThreadDeath,则将线程的称号和仓库回溯(stackbacktrace)发送到System.err。可是Tiger增加了另外一种办法:Thread.UncaughtExceptionHandler接口。细分ThreadGroup或安装该新接口的完成都同意您变动默许举动。我们将对Tiger之前和以后供应的办法都举行研讨。
利用ThreadGroup的定制举动
产生未捕捉的非常时,默许举动是将仓库溢出打印输入到体系毛病(System.err)中,如清单1中所示。不必要利用任何命令参数来启动程序。
清单1.线程溢出示例
publicclassSimpleDump{
publicstaticvoidmain(Stringargs[]){
System.out.println(args[0]);
}
}
不利用任何参数运转该程序将天生清单2中的输入。只管它不是一个很长的仓库跟踪,但它是一个完全的仓库跟踪。
清单2.默许线程溢出输入
Exceptioninthread"main"java.lang.ArrayIndexOutOfBoundsException:0
atSimpleDump.main(SimpleDump.java:3)
正如Java平台的很多工具一样,假如不喜好默许举动,您能够对其举行变动。在Java平台的Tiger版之前的版本中,不克不及替换一切线程的默许举动,可是能够创立一个新的ThreadGroup,并变动在该组内创立的任何线程的默许举动。您能够重写uncaughtException(Threadt,Throwablee)办法来定制该举动。然后,当产生未意料的运转时非常时,该线程组内创立的任何线程都将取得新的举动。不外,最好是修复基本成绩,我将供应一个复杂的示例,申明变动默许举动所必须的步骤。清单3展现了将实行代码放进新线程的调剂过的测试程序:
清单3.调剂过的线程溢出示例
publicclassWindowDump{
publicstaticvoidmain(Stringargs[])throwsException{
ThreadGroupgroup=newLoggingThreadGroup("Logger");
newThread(group,"myThread"){
publicvoidrun(){
System.out.println(1/0);
}
}.start();
}
}
<p>
Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Oracle收购Sun后Java前途未卜。 |
|