background image

catch

(InterruptedException ie){

System.out.println("Will check after 1/2 sec.");  
}
}
 
  在事务完成以后,就使用 get 方法从 Future 对象中检索结果:
System.out.println("Here is result..."+future.get());
ThreadPoolExecutor(线程池执行器)
 
  有了 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)变量。在修改原始的数组或集合之