麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Java技巧:拷貝枚舉器以加強效率

2019-11-18 13:27:58
字體:
來源:轉載
供稿:網友

  當一個代碼段正對集合進行枚舉而另一段代碼試圖修改這個集合時,就會發生常見的多線程問題。解決這一問題的方法是在處理前拷貝一份枚舉變量。
  
  在撰寫多線程代碼時,你碰到過多少次下面的提示:
  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( );
   }
   }
  枚舉器的只讀拷貝將用在同步狀態上的時間減少到最小,因此可以增強全局的效率。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品无吗乱吗av国产爱色 | 亚洲欧美aⅴ | 日本精品久久久久 | chinesehdxxxx无套 久久另类视频 | 久久久久久麻豆 | 久久久aa | 少妇色诱麻豆色哟哟 | 国产精品999在线 | 欧美成人区 | 精品在线观看一区 | 91av亚洲 | 一级黄色毛片播放 | 男女羞羞视频在线观看免费 | 美国黄色毛片女人性生活片 | 99热99精品 | 精品亚洲va在线va天堂资源站 | 意大利av在线 | 91成人影院| 国产午夜电影在线观看 | 福利一区二区三区视频在线观看 | 看国产精品 | 国产精品午夜一区 | 久久久www免费看片 亚洲综合视频一区 | 国产午夜电影在线观看 | 新久草视频| 毛片免费观看完整版 | 精品国产亚洲人成在线 | 久久久婷婷一区二区三区不卡 | 久久久激情网 | 国产精品视频久久久 | 欧美ab | 日本中文字幕网址 | 色婷婷av一区二区三区久久 | 亚洲精品无码不卡在线播放he | 色综合视频网 | 国产中出视频 | 久草久视频 | 精品999久久久 | 一区二区久久精品66国产精品 | 黄色免费入口 | 欧美一级在线看 |