用J2SE1.5来实现多任务的Java应用程序 - 编程入门网
leep(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应用程序(2)时间:2010-04-15有了ThreadPoolExecutor类之后你可以编写自己的服务器了。这个类为配置和调整服务器提供了很多的特性,与很多大规模的企业级EJB服务器相似。下面是它的一些配置参数: 核心和最大的线程池大小 通过把corePoolSize和maximumPoolSize设置为相同的值,你就可以建立一个大小固定的线程池了。通过把maximumPoolSize设置为一个极大的值(例如Integer.MAX_VALUE),你就可以允许线程池容纳任意数量的并发事务了。 根据需要构造 在默认情况下,只有在新事务要求的时候,ThreadPoolExecutor才开始建立和启动核心的线程,但是你可以使用prestartCoreThread或prestartAllCoreThreads动态地重载它。 保持活动的时间 如果线程池中当前线程的数量超过了corePoolSize,那么这些超过的线程的空闲时间大于keepAliveTime的时候,它们就会被终止。 排队 排队遵循下面的规则: 如果正在运行的线程数量少于corePoolSize,Executor总会添加新线程而不会排队。 如果corePoolSize或更多数量的线程在运行,Executor总会对请求进行排队而不会添加新线程。 如果某个请求不能参与排队,就会建立新线程,除非线程数量超过了maximumPoolSize(在超过的情况下,该事务会被拒绝)。 Hook方法 这个类提供了beforeExecute()和afterExecute() hook方法,它们分别在每个事务执行之前和之后被调用。为了使用它们,你必须建立这个类的子类(因为这些方法是受保护的)。 下载代码中的MyThreadPoolExecutor.java提供了一些监视多种配置参数的详细示例。你可以发现随着每个事务的增加和完成,线程池和队列大小在不断变化。你可以修改代码中的设置信息。 并发集合 JDK 1.5提供了下面一些集合实现,它们是被设计为用于多线程环境的: ConcurrentHashMap CopyOnWriteArrayList CopyOnWriteArraySet ConcurrentHashMap类为检索和更新(update)可调整的预期的并发性提供了完整的线程安全的(thread-safe)并发性支持。CopyOnWriteArraySet是一组线程安全的变量集合,CopyOnArrayList是一个线程安全的数组列表(ArrayList)变量。在修改原始的数组或集合之前,它们中的每一个都会把下层的数组或集合复制一份。其结果是,读取的速度很快,而更新的速度很慢。 并发集合类为Iterator(迭代子)提供快照式的数据(即使下层数据发生了改变,在Iterator中也不会反映出来)。 同步器(Synchronizer) JDK 1.5还提供了一些高级类,例如Semaphore、CountDownLatch和CyclicBarrier,还有一个用于同步的Exchanger(交换器)类。本文没有介绍这些类的详细的分析和使用信息,因为理解它们需要一些理论背景。 拥有了这些新的类之后,你可以说服害怕多线程技术的技术上司开发多线程应用程序了。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |