Java 暂停方法,直到再次调用它
我有一个方法Java 暂停方法,直到再次调用它,java,multithreading,Java,Multithreading,我有一个方法run(),它执行许多其他方法。在这些子方法中,在某些子方法中,有一个计数器以1递增。当此计数器达到给定的数值n时,方法run()应暂停一段不确定的时间。当它再次被调用时,它应该在暂停之前从它离开的地方开始执行 这在Java中可能吗 编辑:Andersoj询问的更多信息 我曾多次尝试删除我的代码。这是一个非常基本的例子 public void run(int n) { executeA(); } public void executeA() { while (rando
run()
,它执行许多其他方法。在这些子方法中,在某些子方法中,有一个计数器以1递增。当此计数器达到给定的数值n
时,方法run()
应暂停一段不确定的时间。当它再次被调用时,它应该在暂停之前从它离开的地方开始执行
这在Java中可能吗
编辑:Andersoj询问的更多信息
我曾多次尝试删除我的代码。这是一个非常基本的例子
public void run(int n) {
executeA();
}
public void executeA() {
while (randomCondition) {
executeB();
counter++;
}
executeC();
if (counter <= 100)
executeD();
}
公共作废运行(int n){
executeA();
}
公共无效执行器a(){
while(随机条件){
executeB();
计数器++;
}
executeC();
if(counter如果您的停止和恢复基于给定的条件,并假设该方法将被其他线程唤醒,从而可能导致条件更改(您的问题中没有一个前提是明确的):
或者,您可以使用mutex.wait(waitTime)
等待任意时间
当条件发生变化时,您的另一个线程将唤醒正在等待的线程,或者它将在等待时间结束后再次唤醒,在这种情况下,条件将被重新评估,如果条件没有发生变化,它可能再次进入等待状态
public void run() {
synchronized(mutex){
if(condition){
mutex.notify();
}
}
}
如果您的停止和恢复基于给定的条件,并假设该方法将被其他线程唤醒,从而可能导致条件更改(您的问题中没有明确的前提):
或者,您可以使用mutex.wait(waitTime)
等待任意时间
当条件发生变化时,您的另一个线程将唤醒正在等待的线程,或者它将在等待时间结束后再次唤醒,在这种情况下,条件将被重新评估,如果条件没有发生变化,它可能再次进入等待状态
public void run() {
synchronized(mutex){
if(condition){
mutex.notify();
}
}
}
这听起来像是一个线程问题,这是一个正确的假设吗?@GregFlynn,我曾经考虑过线程,但是当运行()时
方法已暂停,其他方法应该仍然可以执行。我认为没有线程是不可能的,因为您正在描述一个上下文切换。这听起来像是最好用任务和执行者来表示的东西。也许您可以提出一些(骨架?)代码和条件…@andersoj,我添加了一个非常基本的代码框架这听起来像是一个线程问题,这是一个正确的假设吗?@GregFlynn,我考虑过线程化,但是当运行()时
方法已暂停,其他方法应该仍然可以执行。我认为没有线程是不可能的,因为您正在描述一个上下文切换。这听起来像是最好用任务和执行者来表示的东西。也许您可以提出一些(骨架?)代码和条件…@andersoj,我添加了一个非常基本的代码框架。条件决定线程何时暂停。另一个run()
调用应该启动线程again@gieldl你能详细解释一下你的陈述吗?不确定你所说的“重新开始线程”指的是什么,在Java中无法重新启动线程。如果您指的是恢复执行给定线程,则在该线程收到第二段代码中所示的通知之前,不会发生这种情况。请再次返回。是的,我的意思是恢复执行在run()中启动的线程
@gieldl让我换一句话,你有两个线程t1
和t2
。当t1
达到条件时,它将等待任意时间。你的线程t2
执行并改变使t1
暂停的原始条件。现在t2
可以通知t1
或忽略通知n并让t1
消耗其等待时间。当t2
唤醒时(通过t2
通知或消耗其等待时间)它重新测试该条件,如果它已经改变,它将恢复执行,否则,它将再次进入等待模式,并且再次以任意的时间量进入。@ GIDEL可以考虑通过条件确定何时暂停该线程。
应启动线程again@gieldl你能详细解释一下你的陈述吗?不确定你所说的“重新开始线程”指的是什么,在Java中无法重新启动线程。如果您指的是恢复执行给定线程,则在该线程收到第二段代码中所示的通知之前,不会发生这种情况。请再次返回。是的,我的意思是恢复执行在run()中启动的线程
@gieldl让我换一句话,你有两个线程t1
和t2
。当t1
达到条件时,它将等待任意时间。你的线程t2
执行并改变使t1
暂停的原始条件。现在t2
可以通知t1
或忽略通知n并让t1
消耗其等待时间。当t2
唤醒时(通过t2
通知或消耗其等待时间)它重新测试该条件,如果它已经改变,它将恢复执行,否则,它将再次进入等待模式,并且再次以任意的时间量进入。