用J2SE1.5来实现多任务的Java操纵程序[Java编程]
本文“用J2SE1.5来实现多任务的Java操纵程序[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
J2SE 5.0平台包含了一个新的并发工具程序包.这个程序包中的类替并发类(concurrent classe)或并发计划中利用的利用程序成立阻塞(blocking).该并发工具包含下面一些内容:
高性能的、机动的线程池
异步履行事件的框架组件
为并发拜候优化过的调集类宿主(host)
本文介绍了J2SE 5.0框架组件类和它们的重要特点.本文的下载代码供应了一些简单的、简单利用的示例,它演示了全部的新线程框架组件类.你在阅读文章内容之后运行这些示例可以使自己对这些特点有更好的理解.
Executor(履行器)框架组件
Executor框架组件供应了一个简单的、尺度的、可扩大的类,它供应了一些有效的功效,假如没有这些功效,我们要手工实现这些它们,会认为非常单调和艰难.该框架组件使调用、调度和履行的操作尺度化了.它通过一组履行战略为掌握异步事件供应了支持.
Executor接口履行已提交的可以运行的事件.它供应了一条途径,答应我们把事件提交从事件履行机制中别离出来.程序员普通利用Executor替换显式地(explicitly)成立线程.Executor接口也供应事件的同步和异步履行.
关于同步履行,利用下面的号令:
Class MySynExecutor implements Executor{
public void execute(Runnable r) {
r.run();
}
}
关于异步履行,利用下面的号令:
Class MyASynExecutor implements Executor{
public void execute(Runnable r) {
new Thread(r).start();
}
}
ExecutorService(履行器服务)类
ExecutorService类为管理一个或多个异步事件的终止和跟踪事件履行的历程供应了办法.代码下载中的MyExecutorService.java文件演示了管理事件终止的历程.它初始化了大小为三个的线程池,然后顺次增添了线程.当线程的数目到达线程池的大小限制时,它调用关闭(shutdown)办法.在调用shutdown()办法之后,这个线程池不再承受新事件的履行.在等候十秒今后,该线程池调用shutDownNow().这个办法会尽最大的勤奋来终止全部运行中的事件.在示例中,利用程序试图终止运行中的线程失利了.
ScheduledExecutorService(调度履行器服务)
ScheduledExecutorService类是我的最喜好的类.它关于调度那些周期性履行的事件非常便利,而周期性履行的事件关于排除工作(比方排除你的利用程序成立的暂时文件等等)特别有效.下载代码中的MyScheduledExecutorService.java文件通过每五秒钟发出"嘟嘟"一声演示了调度的历程:
final Runnable beeper = new Runnable() {
public void run() { System.out.println("beep"); }
};
final ScheduledFuture beeperHandle =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("Task not yet completed.");
try{
Thread.currentThread().sleep(500);
}catch(InterruptedException ie){
System.out.println("Will check after 1/2 sec.");
}
}
在事件完成今后,就利用get办法从Future对象中检索后果:
System.out.println("Here is result..."+future.get());
ThreadPoolExecutor(线程池履行器)
以上是“用J2SE1.5来实现多任务的Java操纵程序[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |