我有几个线程,其中一些正在等待,有些线程正常运行。其中一个等待一段时间,然后在一个循环中永远做一些事情。我要做的是,如果线程处于休眠状态,请将其停止,如果线程没有休眠,请等待它完成。我的想法是遍历所有线程并执行以下操作:
$response = $client->post('https://www.googleapis.com/oauth2/v4/token', [
RequestOptions::FORM_PARAMS => [
'refresh_token' => 'valid token',
'client_id' => 'xxxxx',
'client_secret' => 'xxxxx',
'grant_type' => 'refresh_token'
],
RequestOptions::HEADERS => [
'Content-Type' => 'application/x-www-form-urlencoded'
]
])->getBody()->getContents();
$oResponse = json_decode($response);
但是,在一个循环中等待一段时间然后再次运行的一个线程会发生什么。如果它在我迭代它的那一刻睡觉,它应该停止,但如果它在那一刻运行,然后我等待它完成,它会完成吗?理想情况下,我希望她的周期结束,然后阻止她,但我很困惑,因为我如何实现这一目标,以及我目前的代码将做什么。
答案 0 :(得分:0)
我不确定你想要实现什么,但请记住,JVM线程调度程序的主要职责是决定应该运行哪个线程以及何时将线程移出运行状态等。无法保证线程调度程序选择要运行的特定线程,您只能使用Thread类中的sleep(),yield(),join()和setPriority()等方法来影响此行为,并且还可以使用wait(),notify()等方法和Object类中的notifyAll()。
因此,您最终可能会根据调度程序上的伪随机选择停止线程或等待。
如果您想轻轻地停止一个过程,还有其他方法可以实现这一目标。