拷贝枚举器以加强效率

mmmmm他爱他

mmmmm他爱他

2016-02-19 18:58

今天图老师小编给大家精心推荐个拷贝枚举器以加强效率教程,一起来看看过程究竟如何进行吧!喜欢还请点个赞哦~

?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)


  当一个代码段正对集合进行枚举而另一段代码试图修改这个集合时,就会发生常见的多线程问题。解决这一问题的方法是在处理前拷贝一份枚举变量。
  
  在撰写多线程代码时,你碰到过多少次下面的提示:
  Exception in thread "main" java.util.ConcurrentModificationException
  
  这个异常产生的原因有几个。一是直接对集合调用删除操作而不是在枚举器上。二是不同的线程试图对集合进行增删操作的时候。
  
  这个解决办法的第一步就是同步代码,使得你在枚举的时候其它的线程不能增删记录。但是假如每个枚举过程要进行复杂的计算或者是数据库访问的一部分的话,这个同步就会导致可怕的后果。为了减少负面影响,可以拷贝一个只读的枚举器,去掉同步,然后采用下列代码所示的方法:
  
  private List list;
  public void add(Object obj) {
  synchronized(list) {
  list.add(obj);
  }
  }
  public void perform( ) {
  Iterator iterator = null;
  synchronized(list) {
  iterator = new CopiedIterator(list.iterator( ));
  }
  while(iterator.hasNext( )) {
  // perform resource or cpu hungry work
  }
  }
  重要的是记住,CopiedIterator不是一个克隆,只是一个只读的拷贝,所以它并没有保持原有的全部功能。最重要的是,不能再调用CopiedIterator.remove方法了。CopiedIterator.remove的实现如下:
  
  public class CopiedIterator implements Iterator {
  private Iterator iterator = null;
  public CopiedIterator(Iterator itr) {
  LinkedList list = new LinkedList( );
  while(itr.hasNext( )) {
  list.add(itr.next( ));
  }
  this.iterator = list.iterator( );
  }
  public boolean hasNext( ) {
  return this.iterator.hasNext( );
  }
  public void remove( ) {
  throw new UnsupportedOperationException("This is a read-only iterator.
  ");
  }
  public Object next( ) {
  return this.iterator.next( );
  }
  }
  枚举器的只读拷贝将用在同步状态上的时间减少到最小,因此可以增强全局的效率。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

 


展开更多 50%)
分享

猜你喜欢

拷贝枚举器以加强效率

编程语言 网络编程
拷贝枚举器以加强效率

Linux如何提高大文件的拷贝效率

电脑入门
Linux如何提高大文件的拷贝效率

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

《以撒的结合 重生》强效道具组合攻略

游戏动漫
《以撒的结合 重生》强效道具组合攻略

《以撒的结合 重生》新版强效道具组合解析

游戏动漫
《以撒的结合 重生》新版强效道具组合解析

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

《以撒的结合 重生》强效道具组合详细心得

电脑网络
《以撒的结合 重生》强效道具组合详细心得

枚举学习案例

电脑网络
枚举学习案例

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

WebLogic的初步研究

WebLogic的初步研究

Word2010导航窗格轻松玩转长文档搜索与导航

Word2010导航窗格轻松玩转长文档搜索与导航
下拉加载更多内容 ↓