|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
比如模式、敏捷方法什么的,这些思想好,但是实施的人没有理解而且没有正确运用这些知识导致了开发周期的延长。比如说对象,通过getName()方法不能获取对象的名字。
“Daemon”线程的感化是在程序的运转时代于背景供应一种“惯例”服务,但它其实不属于程序的一个基础部分。因而,一旦一切非Daemon线程完成,程序也会中断运转。相反,倘使有任何非Daemon线程仍在运转(好比另有一个正在运转main()的线程),则程序的运转不会中断。
经由过程挪用isDaemon(),可查询拜访一个线程是否是一个Daemon,并且能用setDaemon()翻开大概封闭一个线程的Daemon形态。假如是一个Daemon线程,那末它创立的任何线程也会主动具有Daemon属性。
上面这个例子演示了Daemon线程的用法:- //:Daemons.java
- //Daemonicbehavior
- importjava.io.*;
- classDaemonextendsThread{
- privatestaticfinalintSIZE=10;
- privateThread[]t=newThread[SIZE];
- publicDaemon(){
- setDaemon(true);
- start();
- }
- publicvoidrun(){
- for(inti=0;i<SIZE;i++)
- t[i]=newDaemonSpawn(i);
- for(inti=0;i<SIZE;i++)
- System.out.println(
- "t["+i+"].isDaemon()="
- +t[i].isDaemon());
- while(true)
- yield();
- }
- }
- classDaemonSpawnextendsThread{
- publicDaemonSpawn(inti){
- System.out.println(
- "DaemonSpawn"+i+"started");
- start();
- }
- publicvoidrun(){
- while(true)
- yield();
- }
- }
- publicclassDaemons{
- publicstaticvoidmain(String[]args){
- Threadd=newDaemon();
- System.out.println(
- "d.isDaemon()="+d.isDaemon());
- //Allowthedaemonthreadstofinish
- //theirstartupprocesses:
- BufferedReaderstdin=
- newBufferedReader(
- newInputStreamReader(System.in));
- System.out.println("WaitingforCR");
- try{
- stdin.readLine();
- }catch(IOExceptione){}
- }
- }///:~
复制代码
Daemon线程可将本人的Daemon标志设置成“真”,然后发生一系列其他线程,并且以为它们也具有Daemon属性。随后,它进进一个无穷轮回,在个中挪用yield(),保持对其他历程的把持。在这个程序初期的一个版本中,无穷轮回会使int计数器增值,但会使全部程序都好象堕入停留形态。换用yield()后,却可以使程序充斥“活气”,不会令人发生停止或反响愚钝的感到。
一旦main()完成本人的事情,便没有甚么能制止程序中止运转,由于这里运转的只要Daemon线程。以是能看到启动一切Daemon线程后显现出来的了局,System.in也举行了响应的设置,使程序中止前能守候一个回车。假如不举行如许的设置,就只能看到创立Daemon线程的一部分了局(尝尝将readLine()代码换成分歧长度的sleep()挪用,看看会有甚么体现)。
从一个编程语言的普及程度来将,一个好的IDE是至关中要的,而现在的java的IDE虽然已经很好了,但是和.net网页编程比起来还是稍微差一些的,这是个客观事实。java要想普及的更好。DE是必须加以改进的。 |
|