首页 话题 小组 问答 好文 用户 我的社区 域名交易 唠叨

[函数]Threaded::notifyOne()函数—用法及示例

发布于 2025-05-11 07:10:13
0
43

函数名称:Threaded::notifyOne() 函数描述:Threaded::notifyOne() 方法用于通知正在等待与当前线程锁定对象相关联的其他线程中的一个线程。此方法只会通知其中一个线...

函数名称:Threaded::notifyOne()

函数描述:Threaded::notifyOne() 方法用于通知正在等待与当前线程锁定对象相关联的其他线程中的一个线程。此方法只会通知其中一个线程,即等待队列中的第一个线程。

适用版本:PHP 5 >= 5.3.0, PHP 7

语法:public bool Threaded::notifyOne ( void )

返回值:如果成功通知了一个线程,则返回 true。如果发生错误,则返回 false。

示例:

<?php
class MyThread extends Thread {
    public function run() {
        echo "线程开始执行\n";
        $this->synchronized(function ($thread) {
            echo "线程锁定对象\n";
            $thread->wait(); // 线程等待通知
            echo "线程被通知并继续执行\n";
        }, $this);
    }
}

$thread = new MyThread();
$thread->start();

sleep(2); // 保证子线程运行到wait()方法

$thread->synchronized(function ($thread) {
    echo "主线程锁定对象\n";
    $thread->notifyOne(); // 通知子线程
    echo "主线程发送通知\n";
}, $thread);

$thread->join();
?>

输出结果:

线程开始执行
线程锁定对象
主线程锁定对象
主线程发送通知
线程被通知并继续执行

说明:在上述示例中,我们创建了一个名为MyThread的自定义线程类,并重写了run()方法。在run()方法中,我们使用synchronized方法锁定了当前线程对象,并调用wait()方法使线程等待通知。在主线程中,我们也使用synchronized方法锁定了线程对象,并调用notifyOne()方法通知等待中的子线程。最后,我们使用join()方法等待子线程执行完毕。

需要注意的是,Threaded::notifyOne()方法只会通知等待队列中的第一个线程,如果有多个线程等待通知,只有第一个线程会被通知。其他等待中的线程仍然会继续等待通知。

评论
一个月内的热帖推荐
啊龙
Lv.1普通用户

9545

帖子

31

小组

3242

积分

赞助商广告
站长交流