在Demo2类中覆写run()方法,在方法内编写synchronized同步代码块,在进入同步代码块时,打印线程名称,然后编写一个for循环,循环体内打印:运行线程名称+循环次数。当循环次数等于3时,跳出循环。
时间: 2024-03-13 13:44:28 浏览: 57
线程同步demo
好的,下面是一个覆写 run() 方法并添加 synchronized 同步代码块的 Demo2 类示例代码:
```php
class Demo2 implements Runnable {
public function run() {
synchronized(function () {
echo Thread::getCurrentThread()->getName() . " 进入同步代码块\n";
for ($i = 1; $i <= 5; $i++) {
echo Thread::getCurrentThread()->getName() . " 运行 " . $i . " 次\n";
if ($i == 3) {
break;
}
}
});
}
}
```
在上面的代码中,我们重写了 Runnable 接口的 run() 方法,并添加了 synchronized 同步代码块。在同步代码块中,我们首先输出当前线程的名称,然后添加了一个简单的 for 循环,用于输出线程名称和计数器值。在每次循环中,线程会检查计数器的值,如果等于 3,则跳出循环。
需要注意的是,在 synchronized 同步代码块中,我们使用了 Thread::getCurrentThread() 方法来获取当前线程的对象,并调用其 getName() 方法来获取线程的名称。这是因为在多线程环境下,多个线程可能会同时执行 run() 方法,我们需要通过这种方式来区分不同的线程。
当我们创建一个新线程时,可以通过实例化 Demo2 类并将其作为参数传递给 Thread 类的构造函数。例如:
```php
$demo2 = new Demo2();
$thread = new Thread($demo2);
$thread->start();
```
在上面的代码中,我们首先实例化 Demo2 类并将其赋值给 $demo2 变量,然后将 $demo2 变量作为参数传递给 Thread 类的构造函数。最后,我们启动新线程并开始执行 run() 方法。在多线程环境下,多个线程可能会同时执行 run() 方法,但是由于 synchronized 同步块的存在,只有一个线程可以进入同步代码块中执行。其他线程必须等待当前线程执行完同步代码块后才能进入执行。
阅读全文