我有两个线程;让我们称它们为主线程和子线程。
子线程运行用户提交的代码,这些代码被检测到以调用我所提供的yield回调,每次命中某个条件时。
子线程有一个包装器对象,它启动它并提供一个方法handOff,这个方法是从主线程调用的。handOff应该暂停主线程的执行,取消子线程的执行。当从子线程调用yield回调时,子线程应该暂停,主线程应该取消暂停。
包装器对象还具有一个killChild方法。下一次在调用handOff之后调用killChild时,子线程应该停止执行。
所以,控制的流程看起来是这样的:
Main: startChild-->handOff........-->handOff........-->killChild-->handOff-->
Child: -->yield..........-->yield...............其中,-->表示运行的任意代码,而...表示暂停的线程。
它本质上是一个单线程程序,我只需要能够强制用户提交的算法被重入。是的,这相当可怕。
实现这一点的好方法是什么?
发布于 2015-11-24 08:59:35
实现这一点的最简单方法就是首先不要使用线程。您仍然可以在不同的方法和类中分离代码。
假设您出于某种原因需要使用线程,那么这可以通过一个简单的Object lock = new Object()以及wait和notifyAll来完成。
线程轮流等待锁对象,然后当它们想要产生/切换时,它们会notifyAll,然后是wait。杀死只是要在对象中设置的标志,当您从wait返回时,检查标志,如果设置了就退出。
https://stackoverflow.com/questions/33885377
复制相似问题