Java中两个线程之间的时间延迟
我有以下情况:Java中两个线程之间的时间延迟,java,concurrency,sleep,wait,Java,Concurrency,Sleep,Wait,我有以下情况: new Thread() { public void run() { method(object1); } }.start(); // some code ... new Thread() { public void run() { method(object2); } }.start(); 使用的方法是地图绘制方法。因此,基本上,首先我需要使用object1绘制一张地图,然后在一段时间后,例如5秒后,使用
new Thread() {
public void run() {
method(object1);
}
}.start();
// some code ...
new Thread() {
public void run() {
method(object2);
}
}.start();
使用的方法是地图绘制方法。因此,基本上,首先我需要使用object1
绘制一张地图,然后在一段时间后,例如5秒后,使用object2
绘制另一张地图
我试着把线程。sleep(5000)
放在两个线程之间,也放在后面等等。。。但我不能让它工作。有什么建议吗
在这种情况下,显示对象2,而不显示对象1
如果我对第二个线程进行注释,则会绘制第一个对象。此外,如果我对第一个线程进行注释,则会绘制第二个对象。
我需要的是先演示object1 10秒钟,然后再演示object2。试着让它更简单:
method(object1);
Thread.sleep(5000);
method(object2);
如果需要等待5秒钟,则无需运行线程
或者,您可以使用java.util.Timer
——但到目前为止,您的问题似乎不在延迟部分。尝试简化:
method(object1);
Thread.sleep(5000);
method(object2);
如果需要等待5秒钟,则无需运行线程
或者,您可以使用java.util.Timer
——但到目前为止,您的问题似乎不在延迟部分。如果您需要在object1之后使用object2绘制地图,您应该这样做
new Thread() {
public void run() {
method(object1);
method(object2);
}
}.start();
我不确定您的方法(object1)运行需要多长时间,但如果这需要5秒以上的时间,并且线程在睡眠后返回,则方法(object2)将启动,并且如果这比方法(object1)花费的时间少,则可能会先执行方法(object2)。如果需要在object1之后使用object2绘制地图,你应该这样做
new Thread() {
public void run() {
method(object1);
method(object2);
}
}.start();
我不确定您的方法(object1)运行需要多长时间,但如果这需要5秒以上的时间,并且线程在睡眠后返回,则方法(object2)将启动,并且有可能首先执行方法(object2),如果这比方法(object1)花费的时间少.请更清楚地概述您正在尝试做什么以及您已经做了什么。你把睡眠
呼叫放在哪里了?还有什么在运行?似乎你想让他们一个接一个地执行。。。在这种情况下,为什么要使用线程?如果你解释一下你想要达到的目标,那将有助于我们帮助你。目前,线程之间的任何类型的同步都需要同步块和锁,但我不知道这是否是您想要的。sleep()使当前线程处于睡眠状态。您一定犯了错误。如果您所说的绘图是指在某个Swing组件中绘图,那么所有绘图都应该在EDT中完成。请更清楚地概述您正在尝试做什么以及您已经做了什么。你把睡眠
呼叫放在哪里了?还有什么在运行?似乎你想让他们一个接一个地执行。。。在这种情况下,为什么要使用线程?如果你解释一下你想要达到的目标,那将有助于我们帮助你。目前,线程之间的任何类型的同步都需要同步块和锁,但我不知道这是否是您想要的。sleep()使当前线程处于睡眠状态。你一定搞错了。如果你说的绘图是指在某个Swing组件中绘图,那么所有的绘图都应该在EDT中完成。我更喜欢你的解决方案:)在这种情况下,只绘制了与方法(object2)对应的第二个映射。第一个不是。我更喜欢你的解决方案,而不是我的:)在这种情况下,只绘制与方法(object2)对应的第二个映射。第一张不是。如果我喜欢的话,只有第二张地图是可见的!似乎没有调用对方法的第一个调用。@请确保确实调用了第一个调用。可能发生的情况如下:(1)它可能无法在UI上调用invalidate()
或repaint()
;(2) 它可能无法实际更新ui。尝试只调用第一个方法,并检查您是否可以实际看到结果。“sleep()”是一个明确的“黄色标志”,指示潜在的设计错误。“sleep()”只能用作“最后手段”。嗯…@paulsm4这取决于我们解决的问题。如果问题是,object1
未被绘制,则sleep()
不是问题,因此应该保持原样,直到真正的问题得到解决。我确实同意适当的调度程序,无论是计时器
还是执行器服务
,都是一种方法,但在我们解决问题之前,这一点都不重要。重新绘制工作正常。因此,如果我对第二个方法调用进行注释,将绘制object1。反之亦然。如果我这样做,只有第二张地图可见!似乎没有调用对方法的第一个调用。@请确保确实调用了第一个调用。可能发生的情况如下:(1)它可能无法在UI上调用invalidate()
或repaint()
;(2) 它可能无法实际更新ui。尝试只调用第一个方法,并检查您是否可以实际看到结果。“sleep()”是一个明确的“黄色标志”,指示潜在的设计错误。“sleep()”只能用作“最后手段”。嗯…@paulsm4这取决于我们解决的问题。如果问题是,object1
未被绘制,则sleep()
不是问题,因此应该保持原样,直到真正的问题得到解决。我确实同意适当的调度程序,无论是计时器
还是执行器服务
,都是一种方法,但在我们解决问题之前,这一点都不重要。重新绘制工作正常。因此,如果我对第二个方法调用进行注释,将绘制object1。反之亦然。