设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> Java >> 在JAXP中透明的缓存XSL转换器
精品推荐
Java点击TOP10
·java笔试题
·《Thinking in Java》读书笔记
·JSP的mysql_jdbc驱动程序
·异常java.sql.SQLException: Io exception:The Network Adapter could not establish connection
·Java Coder 常用软件下载地址
·org.apache.commons.dbcp.SQLNestedException解决办法
·Java图形界面开发:SWT全接触
·如何使用Java POI生成Excel表文件 !
·功能强大的在线网页编辑器
·一些非常不错的Struts 例子下载
编程开发点击TOP10
·ASP.NET 程序中常用的三十三种代码
·利用ASP.NET构建网上考试系统
·C#版的网站新闻发布系统
·(转)23种设计模式汇集
·设计ASP.NET新闻管理系统
·深山红叶袖珍PE工具箱V16正式版
·我的.NET书架 (入门篇)
·java笔试题
·C++经典电子书下载
·.NET:是什么?将走向哪里?
精选专题

在JAXP中透明的缓存XSL转换器

作者: 来源:网络文章 时间:2005-12-16 22:37:09

在JAXP中透明的缓存XSL转换器(5)       write(file.getAbsolutePath(), templatesCacheEntry);
    }
    else
    {
      logger.debug("Using cached transformation [" + file.getAbsolutePath() + "].");
    }
    return templatesCacheEntry.templates.newTransformer();
  }

 

无论如何,我们仍然必须要考虑另外一个问题:线程安全。缓存始终被很多并发进程所共享,我们必须有一个可靠的方法来使读(从缓存中获得所需内容)和写(保存一个新载入的样式表到缓存)操作安全。

 

虽然Java提供了先进的同步功能,但这里的问题并不是同步,而是如何平衡同步和性能。最简单的方法是全部同步(full synchronization):我们将整个newTransformer(…)方法声明为synchronized,但这种方法效率十分低下。通常我们只有有限的几个样式表,并且并不经常被修改,缓存读的次数要比写的次数要多的多。全部同步(full synchronization)会阻挡其他并发的读取者。首先,这并不是任何时候都需要。第二,这会导致瓶颈问题。

 

另一方面,使用未同步的容器(比如HashMap)来存储缓存内容非常危险。如果我们没有采取任何措施,那么同时发生的读取和写操作(必然会出现的问题)会导致系统不稳定。

 

我们主要会遇到一个典型的读/写问题:一个给定的资源,可能有一个写操作和若干个读操作在某一时间同时发生。这个典型的问题也有一个典型的解决方法,来自于Doug LeaConcurrent Programming in Java。这个方法是,跟踪执行状态(根据计算活动中和等待中的读/写线程的数量确定),只允许在没有任何活动中的写操作线程时才允许读操作。同样,只有在没有活动中的读操作线程时才允许写操作。

 

为实现以上内容,我们将访问缓存的内容写在两个方法中,read()write()

 

两对berfore/afterread/write方法执行需要线程同步的步骤,确保安全,同时保证了访问缓存的效率。

 

protected synchronized void beforeRead()

共13页 9 7 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [138 :>

在JAXP中透明的缓存XSL转换器 相关文章:
在JAXP中透明的缓存XSL转换器 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com