• 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 */
  • 相关阅读:
    L3002 特殊堆栈
    L3007 天梯地图
    L3004 肿瘤诊断
    Linux常用笔记
    微信红包测试用例
    Ubuntu21 bluetooth connects to freebuds pro freebuds耳机Ubuntu21连接失败
    Freebuds Connnect Problem in the Windows Freebuds耳机windows10连接失败
    Ubuntu21 kernal5.13 Nvidia960M驱动安装系统安装
    Linux进程间通信
    Zeppelin返回503问题
  • 原文地址:https://www.cnblogs.com/rojas/p/5351952.html
Copyright © 2020-2023  润新知