JAVA的异步线程与同步线程问题.

 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,请各位大神指导)


HUX布斯
浏览 463回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java