Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中两个线程之间的时间延迟_Java_Concurrency_Sleep_Wait - Fatal编程技术网

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。反之亦然。