实验--线程安全(1)ArrayList
来源:互联网 发布:知乎dota2 编辑:程序博客网 时间:2024/05/29 07:48
事实不像想象中的那样,实践,体会的才深。
被覆盖输出
list.size()=1937 //73个元素被覆盖// 如果size==2000,再试一次直到size <2000
p=1508,n=1510 //1509被覆盖
p=1575,n=1577 //1509被覆盖
检查全部输出:
1506-3001-1507-1508-3002-1510,发现1509被覆盖了。
LinkList,不仅会少,还会nullPointer,因为本身它的last.next==null,多线程,会让被覆盖的元素.next==null,next.next时就会nullPointer了。
import java.util.ArrayList;import java.util.List;/** * @author timeriver.wang * @date 2014-04-18 8:59:08 AM */public class Test { public static void main( String[] args ) { new Test().work(); } public void work(){ List<Integer> list = new ArrayList<Integer>(2000); TT tt = new TT(list); Thread t1 = new Thread( tt, "t-1" ); Thread t2 = new Thread( tt, "t-2" ); t1.start(); t2.start(); //尽量保证两个线程的方法体同时开始执行 tt.started =true; //确保线程t-1,t-2运行结束 try { Thread.sleep( 10000 ); } catch ( InterruptedException e ) { } printSeq( list ); printAll( list ); } private class TT implements Runnable{ private List<Integer> list; public volatile boolean started; public TT(List<Integer> list){ this.list = list; } @Override public void run() { while(true){ if(started){ if(Thread.currentThread().getName().contains( "-1" )){ System.out.println(Thread.currentThread().getName()+list.size()); for(int i=1000;i<2000;i++){ list.add( i ); } }else{ System.out.println(Thread.currentThread().getName()+list.size()); for(int i=3000;i<4000;i++){ list.add( i ); } } break; } } } } private void printAll(List<Integer> list){ System.out.println("############################"); System.out.println("输出全部"); System.out.println("############################"); System.out.println("list.size()="+list.size()); for(int i=0;i<list.size();i++){ System.out.print(list.get( i )+"-"); if(i%100 == 0){ System.out.println(); } } } private void printSeq(List<Integer> list){ System.out.println("############################"); System.out.println("顺序被覆盖的元素输出"); System.out.println("############################"); System.out.println("list.size()="+list.size()); int p = 999; int n = 0; for(int i=0;i<list.size();i++){ n = list.get(i ); if(n == p+1){ p = n; }else if((n > p+1) && n < p + 1000){ System.out.println("p="+p+",n="+n); p=n; } } }}
阅读全文
0 0
- 实验--线程安全(1)ArrayList
- ArrayList线程安全
- ArrayList 非线程安全
- ArrayList的线程安全测试
- 如何让ArrayList线程安全
- 如何让ArrayList线程安全
- 如何使ArrayList 线程安全
- java ArrayList vector 线程安全
- JAVA arraylist的线程安全
- 如何使ArrayList线程安全
- 如何保证ArrayList线程安全
- Java arraylist线程不安全 vectory 线程安全
- ArrayList非线程安全、Vector线程安全原理
- ArrayList和Vector线程安全理解
- ArrayList和Vector线程安全理解
- ArrayList和Vector线程安全理解
- 怎么获得一个线程安全的ArrayList
- 证明ArrayList线程不安全以及如何安全
- 简述 运行时异常RunTimeException和检查性异常Checked Exception
- Driect-nonDricect 读取文件速度
- centos yum 安装 高版本 mysql(5.5)
- [最小基环生成树] Codeforces875F .Royal Questions
- linux centos 安装 源码安装 mysql 5.6
- 实验--线程安全(1)ArrayList
- mongoVUE 用_id查找
- linux步步为营(7)--awk--xargs
- centos 安装 java7,tomcat7,mysql5.6,mongodb
- IoBuffer的wrap,rewind的使用
- linux步步为营(1)--高级
- Html学习---3
- mina 心跳机制 ieRequest isResponse到底什么时候调用
- SQL结果统计 GROUP BY