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