Copy-On-Write是一种程序设计的优化方法,多线程在不修改对象时可以共享一个对象地址空间,如果某一个线程要求修改对象时,需要首先将原来对象复制一份,在新复制的对象地址空间上修改对象内容,其他线程访问此对象时还是访问之前的旧对象,当新对象修改完成后,再将旧对象的指针指向新对象,这种优化方法适合读多写少的场景,体现了读写分离思想。从JDK1.5起;">使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。CopyOnWrite容器非常有用,可以在非常多的并发场景中使用到。
读取线程
package com.test.util;
import java.util.Iterator;
import java.util.List;
public class ReadThread implements Runnable {
private List<Integer> list;
public ReadThread(List<Integer> list) {
this.list = list;
}
@Override
public void run() {
for (Iterator<Integer> it=list.iterator();it.hasNext();) {
Integer num = it.next();
System.out.println("Thread ID="+Thread.currentThread().getId()+",num="+num);
}
}
}
写线程
package com.test.util;
import java.util.List;
public class AddThread implements Runnable {
private List<Integer> list;
public AddThread(List<Integer> list) {
this.list = list;
}
@Override
public void run() {
for(int i=0;i<100;i++)
this.list.add(9);
}
}
测试ArrayList对象
package com.test.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestArrayList {
private void test() {
List<Integer> tempList = Arrays.asList(new Integer [] {1,2,3,4,5});
ArrayList<Integer> copyList = new ArrayList<Integer>(tempList);
//启动十个线程,同时存取集合队列copyList
ExecutorService executorService = Executors.newFixedThreadPool(10);
executorService.execute(new ReadThread(copyList));
executorService.execute(new AddThread(copyList));
executorService.execute(new AddThread(copyList));
executorService.execute(new AddThread(copyList));
executorService.execute(new ReadThread(copyList));
executorService.execute(new AddThread(copyList));
executorService.execute(new ReadThread(copyList));
executorService.execute(new AddThread(copyList));
}
public static void main(String[] args) {
new TestArrayList().test();
}
}
测试结果
Thread ID=10,num=1
Thread ID=10,num=2
Thread ID=10,num=3
Thread ID=10,num=4
Thread ID=10,num=5
Thread ID=14,num=1
Thread ID=14,num=2
Thread ID=14,num=3
Thread ID=14,num=4
Thread ID=14,num=5
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9Exception in thread "pool-1-thread-4"
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
java.lang.ArrayIndexOutOfBoundsException: 186
Thread ID=14,num=9
at java.util.ArrayList.add(ArrayList.java:463)
at com.test.util.AddThread.run(AddThread.java:15)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)Thread ID=16,num=1
Thread ID=16,num=2
Thread ID=16,num=3
Thread ID=16,num=4
Thread ID=16,num=5
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=null
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=14,num=9
Exception in thread "pool-1-thread-5" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:907)
at java.util.ArrayList$Itr.next(ArrayList.java:857)
at com.test.util.ReadThread.run(ReadThread.java:16)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
测试CopyOnWriteArrayList
package com.test.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestCopyOnWriteArrayList {
private void test() {
List<Integer> tempList = Arrays.asList(new Integer [] {1,2,3,4,5});
CopyOnWriteArrayList<Integer> copyList = new CopyOnWriteArrayList<Integer>(tempList);
//启动十个线程,同时存取集合队列copyList
ExecutorService es = Executors.newFixedThreadPool(10);
es.execute(new ReadThread(copyList));
es.execute(new AddThread(copyList));
es.execute(new AddThread(copyList));
es.execute(new AddThread(copyList));
es.execute(new ReadThread(copyList));
es.execute(new AddThread(copyList));
es.execute(new ReadThread(copyList));
es.execute(new AddThread(copyList));
}
public static void main(String[] args) {
new TestCopyOnWriteArrayList().test();
}
}
测试结果
Thread ID=10,num=1
Thread ID=10,num=2
Thread ID=10,num=3
Thread ID=10,num=4
Thread ID=10,num=5
Thread ID=16,num=1
Thread ID=16,num=2
Thread ID=16,num=3
Thread ID=16,num=4
Thread ID=16,num=5
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=16,num=9
Thread ID=14,num=1
Thread ID=14,num=2
Thread ID=14,num=3
Thread ID=14,num=4
Thread ID=14,num=5
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9
Thread ID=14,num=9