|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。
J2SE5.0平台包括了一个新的并发工具程序包。这个程序包中的类替并发类(concurrentclasse)或并发计划中利用的使用程序创建堵塞(blocking)。该并发工具包括上面一些内容:
高功能的、天真的线程池
异步实行事件的框架组件
为并发会见优化过的汇合类宿主(host)
本文先容了J2SE5.0框架组件类和它们的主要特征。本文的下载代码供应了一些复杂的、简单利用的示例,它演示了一切的新线程框架组件类。你在浏览文章内容以后运转这些示例可使本人对这些特征有更好的了解。
Executor(实行器)框架组件
Executor框架组件供应了一个复杂的、尺度的、可扩大的类,它供应了一些有效的功效,假如没有这些功效,我们要手工完成这些它们,会以为非常单协调坚苦。该框架组件使挪用、调剂和实行的操纵尺度化了。它经由过程一组实行战略为把持异步事件供应了撑持。
Executor接口实行已提交的能够运转的事件。它供应了一条路子,同意我们把事件提交处置务实行机制平分离出来。程序员一般利用Executor取代显式地(explicitly)创建线程。Executor接口也供应事件的同步和异步实行。
关于同步实行,利用上面的命令:
ClassMySynExecutorimplementsExecutor{
publicvoidexecute(Runnabler){
r.run();
}
}
关于异步实行,利用上面的命令:
ClassMyASynExecutorimplementsExecutor{
publicvoidexecute(Runnabler){
newThread(r).start();
}
}
ExecutorService(实行器服务)类
ExecutorService类为办理一个或多个异步事件的停止和跟踪事件实行的历程供应了办法。代码下载中的MyExecutorService.java文件演示了办理事件停止的历程。它初始化了巨细为三个的线程池,然后顺次增加了线程。当线程的数目到达线程池的巨细限定时,它挪用封闭(shutdown)办法。在挪用shutdown()办法以后,这个线程池不再承受新事件的实行。在守候十秒今后,该线程池挪用shutDownNow()。这个办法会尽最年夜的勉力来停止一切运转中的事件。在示例中,使用程序试图停止运转中的线程失利了。
ScheduledExecutorService(调剂实行器服务)
ScheduledExecutorService类是我的最喜好的类。它关于调剂那些周期性实行的事件十分便利,而周期性实行的事件关于扫除事情(比方扫除你的使用程序创建的一时文件等等)特别有效。下载代码中的MyScheduledExecutorService.java文件经由过程每五秒钟收回"嘟嘟"一声演示了调剂的历程:
finalRunnablebeeper=newRunnable(){
publicvoidrun(){System.out.println("beep");}
};
finalScheduledFuturebeeperHandle=scheduler.scheduleAtFixedRate(beeper,1,5,SECONDS);
Future和FutureTask
在Java的初期版本中,查询运转中的线程形态,和使线程在实行以后前往一个值长短常坚苦的。因为run(运转)办法前往void,你必需编写大批的代码从线程中前往一个值。利用过这类办法的程序员一定懂得其疾苦的履历。
你可使用Future接口大概FutureTask类从异步实行的线程中失掉一个前往值。Future接口供应了反省盘算历程是不是完成、检索盘算了局或停止盘算历程的一些办法。FutureTask类供应了Future接口办法的基础完成(implementation)。只要盘算历程完成今后才干检索了局;假如盘算历程没有完成,get办法会被堵塞(block)。
下载代码中的MyStringReverser.java文件演示了FutureTask类的利用,并供应了一个简单了解的示例。它以每秒钟一个字符的速率从后向前显现提交的字符串,同时主线程检测事件是不是完成了:
while(!future.isDone()){
System.out.println("Tasknotyetcompleted.");
try{
Thread.currentThread().sleep(500);
}catch(InterruptedExceptionie){
System.out.println("Willcheckafter1/2sec.");
}
}
在事件完成今后,就利用get办法从Future对象中检索了局:
System.out.println("Hereisresult..."+future.get());
ThreadPoolExecutor(线程池实行器)
<p>
java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的), |
|