返回介绍

8.1 准备实验样本

发布于 2024-08-21 22:20:21 字数 973 浏览 0 评论 0 收藏 0

为了方便讲解,我们定义一个简单的类,作为实验样本:

01 public class UnsafeArrayList {
02   static ArrayList al=new ArrayList();
03   static class AddTask implements Runnable{
04     @Override
05     public void run() {
06       try {
07         Thread.sleep(100);
08       } catch (InterruptedException e) {}
09       for(int i=0;i<1000000;i++)
10         al.add(new Object());
11     }
12   }
13   public static void main(String[] args) throws InterruptedException {
14     Thread t1=new Thread(new AddTask(),"t1");
15     Thread t2=new Thread(new AddTask(),"t2");
16     t1.start();
17     t2.start();
18     Thread t3=new Thread(new Runnable(){
19       @Override
20       public void run() {
21         while(true){
22           try {
23             Thread.sleep(1000);
24           } catch (InterruptedException e) {}
25         }
26       }
27     },"t3");
28     t3.start();
29   }
30 }

在这里,我使用的JDK版本为JDK8u5。

上述代码是在多线程下访问ArrayList,因此,是错误的写法。在这里,我们将使用调试,重现这个错误。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文