如何让一个线程停止执行另一个任务然后回来?

Posted

技术标签:

【中文标题】如何让一个线程停止执行另一个任务然后回来?【英文标题】:How to let a thread stop to do another task and then come back? 【发布时间】:2017-11-16 18:45:23 【问题描述】:

请注意:事实上,这可能不是一个真正的问题,只是来自我的想法:)

在所有编程语言中,是否有一些方法可以做到这一点:

一个线程(名为 ThreadA)正在执行一个消耗时间任务(名为 TaskA)。 当它完成TaskA的一部分时,我们可以让它在完成另一个任务时继续做剩下的事情吗?换句话说,我们可以让线程stop to do 执行另一个任务,然后返回到continue to do 剩下的部分吗?

更新: 假设我们有两个任务TaskA(低优先级)和TaskB(高优先级)。我们仅限于创建一个线程来执行任务。线程在做TaskA时,如果有更高优先级的任务来了(比如TaskB),线程必须保存当前状态,做更高的。

【问题讨论】:

它可以启动另一个线程来执行第二个任务,并等待它完成。 我不太明白你想要达到什么目的......线程正在并行执行,也就是说,如果线程 A 完成了它的一部分工作,它可以向线程 B 发出信号以对其执行某些操作。 ... @SteveSmith 感谢您的评论。如果我们只使用一个线程,它可以同时执行更多任务吗? 线程可以同时执行任务。 @FdXing 程序中的每一行都逐行执行。如果你不想同时做一些事情,你至少需要 2 threds。一个在做 taskA 另一个在做 taskB 【参考方案1】:

我认为您所说的只是方法中的方法调用。

public void taskA() 
    int i = 1;
    i++;
    //DO other stuff
    System.out.println("Starting to work on other task")
    taskB(); //<------ This is what you're looking for
    System.out.println("Finished with other task. Now working on this task again")
    i++;
    System.out.println(i);


public void taskB() 
    System.out.println("This is from other task")

【讨论】:

好吧。在主线程或新的单独线程中运行它没有区别。 @TomStein 感谢您的评论。我更新我的问题。对不起我的英语不好。【参考方案2】:

我认为他正在寻找的是等待并通知

wait() - Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object.

notify() - Wakes up a single thread that is waiting on this object's monitor.

或暂停、停止、恢复

找到你一个链接:https://www.tutorialspoint.com/java/java_thread_control.htm

【讨论】:

感谢您的评论@OferSkulsky。我更新了这个问题。希望不要混淆你。对不起我的英语不好。

以上是关于如何让一个线程停止执行另一个任务然后回来?的主要内容,如果未能解决你的问题,请参考以下文章

怎么让当前线程等待另一个线程完成之后再去执行

如何在android中停止异步任务线程?

c#线程停止

如何正确停止线程

如何正确停止线程

如何在winform中实现,一个按钮停止另一个按钮的事件