如何暂停一个方法java

时间:2016-05-06 17:02:00

标签: java methods wait sleep

我希望方法2睡眠,直到方法1允许方法2继续再次运行。我该如何完成这个暂停?

method 1{
some code here
if(enter key pressed){
allow method 2 to continue
}
}
method 2{
some code here
wait until method 1 allow you to continue
do whatever you are supposed to continue with
}

4 个答案:

答案 0 :(得分:0)

在任何语言中,方法应该是精确的,并且以任务为导向,如果方法2开始执行任务然后等待外部调用继续,那么这是臭代码的好兆头,

我建议看一下代码,分割它们的动作是更具体的任务,然后将它们绑定在你需要的逻辑中。

<强> LIKE

method 1{
        some code here
        method2_SubTaskA()
        if(enter key pressed){
            allow method 2 to continue
            method2_SubTaskB()
        }
}
method 2SubTaskA{
        some code here
        wait until method 1 allow you to continue
        do whatever you are supposed to continue with
}
method 2SubTaskB{
        some code here
        wait until method 1 allow you to continue
        do whatever you are supposed to continue with
}

答案 1 :(得分:0)

您可以使用多线程:

boolean method2Continue = false;

public void method1() {
    // ...
    Thread thread = new Thread(() -> method2());
    thread.start();
    if(keyPressed){
        method2Continue = true;
    }
    thread.interrupt();
    // ...
}
public void method2() {
    // ...
    while(!method2Continue);
    // ...
}

在调用thread.start()之后,方法1和方法2将同时执行,但是当方法2到达while循环时,它将等待method2Continue为真,直到它继续到下一行。在方法1结束时,方法2线程将被终止,这将停止执行。

在此处查看演示:https://ideone.com/eqnTh7

答案 2 :(得分:0)

这里可以避免使用多个线程:

private Runnable runnable;

void method1() {
    // Some code here
    if(enter key pressed && runnable != null) {
        runnable.run(); // Execute continue code
        runnable = null; // Make sure it can't be run twice
    }
}

void method2() {
    // Some code here
    runnable = new Runnable(() -> {
        // Continue code here
    });
}

使用匿名类可以从method2中捕获变量。

答案 3 :(得分:0)

正如@ SamTebbs33所说,使用多线程;他的榜样是一个很好的起点。我建议您使用boolean表示CountdownLatch继续使用method2的时间,而不是使用CoubtdownLatch。以下问题给出了一个详细的例子:How is CountDownLatch used in Java Multithreading?

通常,使用内置并发API比编写自己的本地解决方案更安全 - 它更易于理解且不易出错。

请参阅https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html

上的 if( $(this).parents(".msg_body_a").children(".msga").append(conTent)){ $(this).parents(".chat_body").children(".msg_body_a").scrollTop(1000 * 1000 * 5000 *2 * 1000 *90000); /* set uncountable number */ $(this).val(""); }; JavaDocs