我想知道是否有Thread::start()
返回false
的情况。 manual对此并不十分清楚。
在以下情况下我能够让start()
失败。在所有情况下,它都会抛出RuntimeException
,因此没有false
返回。
尝试开始两次
$thread = new Thread;
$thread->start();
$thread->start(); // RuntimeException
排放系统资源
class TestThread extends Thread
{
public function run()
{
sleep(PHP_INT_MAX);
}
}
$threads = [];
for (;;) {
$thread = new TestThread;
if (!$thread->start()) { // RuntimeException eventually
echo 'FALSE returned.', PHP_EOL; // never printed
break;
}
$threads[] = $thread;
}
尝试从线程 再次启动线程(注意:您可以从线程启动线程;这只是一个让它失败的示例。)
class TestThread extends Thread
{
public function run()
{
// necessary to see the exception
set_exception_handler(function ($exception) {
throw $exception;
});
self::start(); // RuntimeException
}
}
(new TestThread)->start();