ArrayList中的异常示例?

彼德

我正在使用ArrayList,并且如果多个线程尝试在不同步的情况下访问同一列表,我想举一个异常示例。我是在单线程应用程序中完成的,如果在迭代过程中从列表中删除一个元素,它将引发ConcurrentModificationExceptoin,但我想在多线程环境中实现相同的目的。如果有人能给我举一个例子,将不胜感激?

package com.test2;

public class ThreadTest extends Thread {

    List list = new ArrayList<String>();

    @Override
    public void run() {

        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        try {
            Thread.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        list.add("6");
        list.add("7");
        list.add("8");

        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }

    }

    public static void main(String[] args) {



        Thread th1 = new ThreadTest();
        Thread th2 = new ThreadTest();
        Thread th3 = new ThreadTest();
        th1.start();
        th2.start();
        th3.start();
        try {
            th1.join();
            th2.join();
            th3.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }




    }

}
DaoWen

您正在每个线程中访问一个单独的列表实例。由于每个列表只能由一个线程访问,因此不会出现并发错误。

List list = new ArrayList<String>();

那声明了一个实例字段因此,每次调用new ThreadTest()都会创建一个新列表。为了使所有ThreadTest实例使用相同的列表,请尝试创建字段static(即class字段):

static List list = new ArrayList<String>();

至于如何可能发生的错误,看看为代码ArrayListadd方法

 public boolean add(E e) {
     ensureCapacityInternal(size + 1);  // Increments modCount!!
     elementData[size++] = e;
     return true;
 }

如果两个线程同时调用add,则它们可以同时处理该elementData[size++] = e语句。size字段没有声明volatile; 因此,这两个线程最终可能写入elementData数组中的同一索引

即使size被声明volatile,该size++操作也不原子的请参阅当同时执行线程破坏了i ++时如何建模情况?举例说明类似的操作如何size++在多线程环境中失败。

最后,如果您不了解volatileJava上下文中的含义和原子含义,那么在编写任何多线程代码之前,您确实需要阅读Java并发编程。这将是一项值得的投资,因为您可以通过了解这些概念来省去很多麻烦。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AspectJ示例中的nullpointer异常

来自分类Dev

ArrayList中的ConcurrentModification异常

来自分类Dev

匿名内部类示例中的异常

来自分类Dev

匿名内部类示例中的异常

来自分类Dev

从ArrayList中删除项目时发生异常

来自分类Dev

Java ArrayList中的空指针异常

来自分类Dev

使用自述文件中的示例时出现AFNetworking异常

来自分类Dev

Hbase示例,线程“ main”中的异常java.lang.NoClassDefFoundError

来自分类Dev

使用OpenCV和Java的MatchTemplate示例中的空指针异常

来自分类Dev

Matlab 在调用堆栈中处理异常的最小工作示例?

来自分类Dev

Eclipse Java异常示例

来自分类Dev

如何在java中的arraylist中添加异常

来自分类Dev

将arraylist存储到数组中时出现异常

来自分类Dev

如何避免从arraylist中索引出p绑定异常

来自分类Dev

如何避免从arraylist中索引出p绑定异常

来自分类Dev

动画示例行为异常

来自分类Dev

Python:在此示例中,抛出异常是正确的用例吗?

来自分类Dev

带有Angular 2和firebase的基本示例中的Auth异常

来自分类Dev

为什么在此多线程示例中未捕获到异常?

来自分类Dev

尝试在DocuSign示例配方代码中创建信封时获取PDF_VALIDATION_FAILED异常

来自分类Dev

带有Angular 2和firebase的基本示例中的Auth异常

来自分类Dev

Python:在此示例中,抛出异常是正确的用例吗?

来自分类Dev

TensorFlow LlinearRegressor 示例未能在路径 C:\Users 中创建目录并引发异常

来自分类Dev

ArrayList空指针异常

来自分类Dev

Arraylist异常错误

来自分类Dev

ArrayList空指针异常

来自分类Dev

为什么Web服务中的方法在C#中返回Arraylist时会发生异常?

来自分类Dev

如何使用 Arraylist 中的值填充 Jtable(Jtables 中的空指针异常)

来自分类Dev

嵌套自定义异常示例

Related 相关文章

  1. 1

    AspectJ示例中的nullpointer异常

  2. 2

    ArrayList中的ConcurrentModification异常

  3. 3

    匿名内部类示例中的异常

  4. 4

    匿名内部类示例中的异常

  5. 5

    从ArrayList中删除项目时发生异常

  6. 6

    Java ArrayList中的空指针异常

  7. 7

    使用自述文件中的示例时出现AFNetworking异常

  8. 8

    Hbase示例,线程“ main”中的异常java.lang.NoClassDefFoundError

  9. 9

    使用OpenCV和Java的MatchTemplate示例中的空指针异常

  10. 10

    Matlab 在调用堆栈中处理异常的最小工作示例?

  11. 11

    Eclipse Java异常示例

  12. 12

    如何在java中的arraylist中添加异常

  13. 13

    将arraylist存储到数组中时出现异常

  14. 14

    如何避免从arraylist中索引出p绑定异常

  15. 15

    如何避免从arraylist中索引出p绑定异常

  16. 16

    动画示例行为异常

  17. 17

    Python:在此示例中,抛出异常是正确的用例吗?

  18. 18

    带有Angular 2和firebase的基本示例中的Auth异常

  19. 19

    为什么在此多线程示例中未捕获到异常?

  20. 20

    尝试在DocuSign示例配方代码中创建信封时获取PDF_VALIDATION_FAILED异常

  21. 21

    带有Angular 2和firebase的基本示例中的Auth异常

  22. 22

    Python:在此示例中,抛出异常是正确的用例吗?

  23. 23

    TensorFlow LlinearRegressor 示例未能在路径 C:\Users 中创建目录并引发异常

  24. 24

    ArrayList空指针异常

  25. 25

    Arraylist异常错误

  26. 26

    ArrayList空指针异常

  27. 27

    为什么Web服务中的方法在C#中返回Arraylist时会发生异常?

  28. 28

    如何使用 Arraylist 中的值填充 Jtable(Jtables 中的空指针异常)

  29. 29

    嵌套自定义异常示例

热门标签

归档