zoukankan      html  css  js  c++  java
  • java.util.concurrent.CopyOnWriteArrayList

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 import java.util.concurrent.ExecutorService;
     4 import java.util.concurrent.Executors;
     5 import java.util.concurrent.CopyOnWriteArrayList;
     6  
     7 public class TestCalc {
     8     /**
     9      *read 
    10      */
    11     private static class ReadTask implements Runnable {
    12         List<String> list;
    13  
    14         public ReadTask(List<String> list) {
    15             this.list = list;
    16         }
    17  
    18         public void run() {
    19             for (String str : list) {
    20                 System.out.println(str);
    21             }
    22         }
    23     }
    24     /**
    25      *write
    26      *
    27      */
    28     private static class WriteTask implements Runnable {
    29         List<String> list;
    30         int index;
    31  
    32         public WriteTask(List<String> list, int index) {
    33             this.list = list;
    34             this.index = index;
    35         }
    36  
    37         public void run() {
    38             list.remove(index);
    39             list.add(index, "write_" + index);
    40         }
    41     }
    42  
    43     public void run() {
    44         final int NUM = 10;
    45          //List<String> list = new ArrayList<String>(); //java.util.ConcurrentModificationException
    46          CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();
    47         for (int i = 0; i < NUM; i++) {
    48             list.add("main_" + i);
    49         }
    50         ExecutorService executorService = Executors.newFixedThreadPool(NUM);
    51         for (int i = 0; i < NUM; i++) {
    52             executorService.execute(new ReadTask(list));
    53             executorService.execute(new WriteTask(list, i));
    54         }
    55         executorService.shutdown();
    56     }
    57  
    58     public static void main(String[] args) {
    59         new TestCalc().run();
    60     }
    61 }
    62 
    63 /*
    64 
    65  //List<String> list = new ArrayList<String>(); 
    66 Exception in thread "pool-1-thread-11" java.util.ConcurrentModificationException
    67 
    68         at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
    69         at java.util.ArrayList$Itr.next(Unknown Source)
    70         at TestCalc$ReadTask.run(TestCalc.java:19)
    71         at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    72         at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    73         at java.lang.Thread.run(Unknown Source)
    74 */
  • 相关阅读:
    SqlServer 格式化时间
    工作生活两三事
    前端面试题准备 3
    前端面试题准备 2
    MYSQL---自定义函数
    MYSQL---MD5()、PASSWORD()函数
    MYSQL---DATE_ADD()
    MYSQL---%
    MYSQL---多表删除
    MYSQL---CREATE...SELECT
  • 原文地址:https://www.cnblogs.com/rojas/p/5351952.html
Copyright © 2011-2022 走看看