public static void main(String[] args) {
int threadCount = 1000; // 线程数量(1000)
CountDownLatch countDownLatch = new CountDownLatch(threadCount);
List<Object> list = new ArrayList<Object>();
MyThreadTest myThreadTest = new MyThreadTest(list);
MySync mySync = MySync.getMySync(myThreadTest,countDownLatch);
// mySync = new MySync(myThreadTest,countDownLatch); // 为什么放开这段代码,会连 System.out.println("========:"+list.size()); 都不会执行了?
try {
for(int i =0;i<threadCount;i++){
mySync.run();
}
countDownLatch.await(); // 主线程等待所有子线程执行完成,再向下执行
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("========:"+list.size());
}
}
class MyThreadTest implements Runnable{
private List<Object> list;
private int i = 0;
public MyThreadTest(List<Object> list){
this.list = list;
}
@Override
public void run() {
i++;
list.add(new Object());
System.out.println(i);
}
}
class MySync{
private static CountDownLatch countDownLatch;
private static Runnable runn;
public MySync(){}
@SuppressWarnings("static-access")
public MySync(Runnable runn,CountDownLatch countDownLatch){
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(MySync.class);
enhancer.setCallback(new MethodInterceptorImpl());
MySync mySync = (MySync)enhancer.create();
mySync.countDownLatch = countDownLatch;
mySync.runn = runn;
}
@SuppressWarnings("static-access")
public static MySync getMySync(Runnable runn,CountDownLatch countDownLatch){
Enhancer enhancer = new Enhancer();
System.out.println("========:"+list.size()); 使用计数来进行了同步,这段代码不应该是最后才会输出的吗?测试结果是不确定什么时候输出.
如果放开注释的那段代码,为什么连System.out.println("========:"+list.size()); 都不输出了?这是什么原因造成的?(不知道这段代码还有什么BUG,请各位大神指导)
相关分类