我试图通过调用Thread类的sleep()
方法暂停执行部分程序几秒钟。但是,当我尝试此操作时,此调用后立即执行的代码仍会立即执行。例如,如果我有代码:
Thread compoundThread = new Thread(new Runnable()
{
public void run()
{
try
{
Thread.currentThread().sleep(2000);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
Thread.currentThread().interrupt();
}
}
});
compoundThread.start();
System.out.println("line 15")
第15行立即打印。有没有解决这个问题的方法?我认为sleep()
方法的整个想法是暂停执行。
编辑以回应Philipp的评论
while (totalNoOfPhase1Trials > 399)
{ //
Phase1Trial phase1Trial = new Phase1Trial(numberOfElements, elementColors);
displayComplexStimulus(phase1Trial.getComplexStimulus());
validate();
Thread compoundThread = new Thread(new Runnable(){
public void run() {
try {
Thread.currentThread().sleep(2000);
System.out.println("line 226");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
}
}
});
compoundThread.start();
try {
compoundThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
{I} displayCompoundStimulus
方法显示一组jlabels
,当我没有包含你刚才提到的线程进入睡眠状态的代码时,没有任何延迟。但是,当我包含使线程进入休眠状态的代码时,图像的显示也会延迟两秒,这很奇怪,因为Thread.sleep()
在显示图像后执行。
答案 0 :(得分:3)
代码表现为已实现。您正在运行主线程,它启动另一个线程,该线程休眠2000毫秒。
所以你的主线程确实如此:
根据您想要实现的目标,您可以删除整个线程并执行:
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// should not happen, you don't interrupt
}
System.out.println("line 15");
否则,您可以将输出移动到线程的run方法中:
Thread compoundThread = new Thread(new Runnable(){
public void run() {
try {
Thread.sleep(2000);
System.out.println("line 15");
} catch (InterruptedException e) {
// do whatever has to be done
}
}
});
compoundThread.start();
// you might want to wait until compoundThread is done
compoundThread.join();
更新:根据您对延迟输出的评论
如果您使用以下代码:
public static void main(String[] args) {
System.out.println("Hello");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// should not happen, you don't interrupt
}
System.out.println("World");
}
输出将为“Hello”,并在“World”之后两秒。线程将睡两个小时。
答案 1 :(得分:1)
主线程是开始运行main方法的线程。
然后,您的main方法创建一个新的Thread
对象并调用compoundThread.start();
,这会导致第二个线程开始执行。
之后,不停止主线程继续执行并到达print语句。因此主线程正在打印line 15
。
你开始的secnond线程睡了2秒然后终止。如果您在run
调用后将print语句放在线程的sleep
方法中,那么在打印line 15
之前会有2秒的暂停。
答案 2 :(得分:1)
这里compoundThread
是一个新的线程对象。您的line 15
是通过main方法执行的。因此,当您启动compoundThread.start()
时,将创建一个新线程并独立于主线程启动。
如果您想减慢主线程的速度,只需在可运行的对象代码外部使用Thread.sleep(2000)
即可。
答案 3 :(得分:0)
原始线程(主线程)启动一个新线程,新线程休眠两秒钟。原始线程没有,这就是为什么它打印"第15行"立即。因此,如果你理解并正确应用它,Sandeep的建议虽然简洁,但应该有效。另一个显而易见的可能性是将System.out.println
语句放在run
的{{1}}方法中。
答案 4 :(得分:0)
有一个观点&告诉我它是否有效
答案 5 :(得分:-2)
我建议你使用简单的
thread.sleep(2000)