文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
8.1 准备实验样本
为了方便讲解,我们定义一个简单的类,作为实验样本:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论