我希望方法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
}
答案 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