我可以在这里请教一些建议。

由于存在性能问题,我想在类的构造函数中创建多个线程,因为我想添加更多的系列和流程。但是这些线程需要花费随机的时间进行初始化,这意味着代码仍然可以执行,并且抛开了我的数组列表的顺序,现在混乱了,当代码继续执行时,它并没有完全加载。

Series是一个包装器,用于添加侦听器并简化输出,以使我的框架实例化面板中的图表时需要一系列ArrayList。

什么是正确的进行方法。我觉得我做错了。

    new Thread(new Runnable() {
        public void run() {
            Flow flow = new Flow(idThread, 1);
            flows.add(flow);
            series.add(new Series(3000, ProcessingType.NONE, flow, controller));
            series.add(new Series(5000, ProcessingType.FILTER, flow, controller));
        }
    }).start();

    new Thread(new Runnable() {
        public void run() {
            Flow flow = new Flow(idThread, 2);
            flows.add(flow);
            series.add(new Series(4000, ProcessingType.NONE, flow, controller));
            series.add(new Series(5000, ProcessingType.FILTER, flow, controller));
        }
    }).start();

    Global.getInstance().mySeries(idThread, series);
    trading = new Trading(idThread);


我天真地尝试了

while (series.size()<10){
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


但是,从逻辑上讲,主线程应该处于休眠状态,并留出时间让其他线程初始化?

谢谢

最佳答案

不要扩展Thread,实现Runnable。除非您真的喜欢怪异的错误,否则请不要从构造函数中启动新线程。您可以使用诸如https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html之类的各种同步惯用法来“将马匹排在赛前门口”。

关于java - 多线程初始化同步,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44852030/

10-11 19:06
查看更多