Java 多线程初始化同步

Java 多线程初始化同步,java,multithreading,Java,Multithreading,我可以在这里问你一个建议吗 我在类的构造函数中创建了几个线程,因为我有一个性能问题,因为我想添加更多的系列和流。然而,这些线程需要随机时间来初始化,这意味着代码仍然在执行,并且抛开数组列表的顺序,现在已经搞乱了,当代码继续执行时,它没有完全加载 Series是一个包装器,它添加侦听器并简化一系列ArrayList的输出,我的框架需要这些ArrayList在面板中实例化图表 正确的方法是什么。我觉得我做错了 new Thread(new Runnable() { publi

我可以在这里问你一个建议吗

我在类的构造函数中创建了几个线程,因为我有一个性能问题,因为我想添加更多的系列和流。然而,这些线程需要随机时间来初始化,这意味着代码仍然在执行,并且抛开数组列表的顺序,现在已经搞乱了,当代码继续执行时,它没有完全加载

Series是一个包装器,它添加侦听器并简化一系列ArrayList的输出,我的框架需要这些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();
        }
    }

while(series.size()不要扩展
Thread
,实现
Runnable
。除非你真的喜欢奇怪的bug,否则不要从构造函数中启动新线程。你可以使用各种同步习惯用法,例如“比赛前在门口排队”.

您可以使用一个
CyclicBarrier
,在这里您可以在main中调用
await()
方法,直到所有线程都达到这个障碍,您的主线程才会等待


为什么不在准备好之前启动线程呢?更具体地说,与其直接实例化
线程
,不如扩展它,让线程对象在构造函数中做一些事情,然后在准备好后启动它们。另外,还不清楚您所指的不同对象做什么和是什么。请解释
series
flow
等是什么。我明白了,我想这就是我在这里缺少的。谢谢,让我检查一下,显然没有必要扩展
Thread
,但当然你可以构造你想要的所有
Thread
对象,然后在最后一个对象初始化后启动它们。@matel你可以调用wait()在未加载的情况下,在main中的arraylist series上,任何添加到series的线程都将调用notify()或notifyAll()来开始处理。