<< 九月 2008 | 首页 | 十一月 2008 >>

我收藏的链接(28)

WAP建站不容易!WAP(wml)开发FAQ | wap建站服务网
WML Tutorial: Learn How to Submit Form Data to the Server in WML
一个WML文档例子
WML Reference
WML参考文档
[jvm-l] Calling non-Java languages from JavaScript
通过web页面上的 JavaScript调用页面上任何的applets
脚本调试工具 Microsoft Script Debugger - 河之堤 - CSDNBlog
Bug ID: 6358034 NPE in Win32GraphicsEnvironment.displayChanged when switching display mode
awt-eventqueue-0 win32graphicsenvironment
Seam Tutorial/Tips : Weblog
Raible Designs | RESTful Web Applications with Subbu Allamaraju
剖析CTI软件产品(下) - 客户世界 - 呼叫中心 | 客户管理 | 数据营销 | 服务外包 - [http://www.ccmw.net]
剖析CTI软件产品(上) - 客户世界 - 呼叫中心 | 客户管理 | 数据营销 | 服务外包 - [http://www.ccmw.net]
JavaPassion 中文站 - 激情无限
国际:什么是程序员的优秀品质? , 开发者,程序员,实践,代码,测试者,技术,编程,方法,知识,语言, , - CSDN 新闻
探秘Google数据中心:运行服务器远超20万台 - 百度通站长资讯网 通天下站长
InfoQ: 辩论:Maven是正确的构建工具吗?
整理了一天的JAVA面试题(先保存下) - admin - JavaEye技术网站
Flexigrid for jQuery : Web 2.0 Javascript Data Grid
Java IDL: Interoperable Naming Service (INS) Example - JDK 5 Documentation v1.4.1, Java 2 SDK 英文文档 - 在线文档 - JAVA 编程资料牛鼻站
基于JAVA实现CORBA应用--oofrank的博客 oo java .Net
Eclipse中corba环境的建立 - 企业应用 - Java - JavaEye论坛
应用CIM模型进行系统集成 - 输配电设备网
ConcurrentModificationException | Zeal Blog - 泽欧里的网络日志
java.util.ConcurrentModificationException异常
ConcurrentModificationException (Java 2 Platform SE 5.0)
java.util.ConcurrentModificationException异常
InfoQ: 讨论:衡量程序员的工作效率
用J2ME收发短信 -- Wireless Messaging API - 中国JAVA手机网
JBoss - Jetty - Codehaus
Jetty JBoss Integration.
InfoQ: 缓存系统MemCached的Java客户端优化历程
50个Windows软件的免费替代品 | 精华之家|HIGHTHOUSE
Windows系统必备的30个免费开源软件 (转载) - Free Programming - 博客园
标签 :

如何用WAP蜂窝电话上传文件

WML(WAP1.X标记语言)和XHTML MP(WAP2.0标记语言)不支持文件上传。但是幸运的是,在一些wap2.0蜂窝电话上的浏览器支持<input type="file">元素作为XHTML MP的扩展。一些HTML兼容的WAP浏览器也支持<input type="file">元素。

阅读全文……

标签 :

关于ConcurrentModificationException异常

关于ConcurrentModificationException异常

在Java API里已经解释了这个ConcurrentModificationException异常的来历:

当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。

例如,某个线程在 Collection 上进行迭代时,通常不允许另一个线程修改该 Collection。通常在这些情况下,迭代的结果是不明确的。如果检测到这种行为,一些迭代器实现(包括 JRE 提供的所有通用 collection 实现)可能选择抛出此异常。执行该操作的迭代器称为快速失败 迭代器,因为迭代器很快就完全失败,而不会冒着在将来某个时间任意发生不确定行为的风险。

注意,此异常不会始终指出对象已经由不同 线程并发修改。如果单线程发出违反对象协定的方法调用序列,则该对象可能抛出此异常。例如,如果线程使用快速失败迭代器在 collection 上迭代时直接修改该 collection,则迭代器将抛出此异常。

注意,迭代器的fail-fast快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败操作会尽最大努力抛出 ConcurrentModificationException。因此,为提高此类操作的正确性而编写一个依赖于此异常的程序是错误的做法,正确做法是:ConcurrentModificationException 应该仅用于检测 bug。

 

         当使用 fail-fast iterator 对 Collection 或 Map 进行迭代操作过程中尝试直接修改 Collection / Map 的内容时,即使是在单线程下运行,  java.util.ConcurrentModificationException 异常也将被抛出。

   Iterator 是工作在一个独立的线程中,并且拥有一个 mutex 锁。 Iterator 被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,所以当索引指针往后移动的时候就找不到要迭 代的对象,所以按照 fail-fast 原则 Iterator 会马上抛出 java.util.ConcurrentModificationException 异常。

  所以 Iterator 在工作的时候是不允许被迭代的对象被改变的。但你可以使用 Iterator 本身的方法 remove() 来删除对象, Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。

  有意思的是如果你的 Collection / Map 对象实际只有一个元素的时候, ConcurrentModificationException 异常并不会被抛出。这也就是为什么在 javadoc 里面指出: it would be wrong to write a program that depended on this exception for its correctness: ConcurrentModificationException should be used only to detect bugs.

 

下面的代码没有问题:

  1. import java.util.*;  
  2.   
  3. public class TryIteratorRemove {  
  4.     public static void main(String [] args){  
  5.         Collection<String> myCollection = new ArrayList<String>(10);  
  6.           
  7.         myCollection.add("123");  
  8.         myCollection.add("456");  
  9.         myCollection.add("789");  
  10.           
  11.         int i=0;  
  12.           
  13.         for(Iterator it = myCollection.iterator();it.hasNext();) {  
  14.             String myObject = (String)it.next();  
  15.             System.out.println(myObject);  
  16.               
  17.             i++;  
  18.   
  19.             if(i==1){  
  20.                 //myCollection.remove(myObject);  //这行代码有问题,会抛出ConcurrentModificationException
  21.                 it.remove();  
  22.             }  
  23.         }  
  24.   
  25.         System.out.println("After remove,the size of myCollection is: " +  
  26.                        myCollection.size()+" \n and its content is: ");  
  27.   
  28.         for(String s : myCollection){  
  29.             System.out.println(s);  
  30.         }  
  31.     }  

 


 

 
标签 : , ,

在Spring中使用Quartz任务调度支持集群

虽然在Quartz上有配置Quartz集群Clustering ,但是在Spring中使用Quartz任务调度并支持集群系统却有些问题,下面介绍解决办法:

阅读全文……

标签 : , ,