.启动3个线程打印递增的数字,控制线程1打印1,2,3,4,5(每行都打印线程名和一个数字),线程2打印6,7,8,9,10,线程3打印11,12,13,14,15;接下来再由线程1打印16,17,18,19,20,......依次类推,直到打印75。
时间: 2024-03-27 20:36:02 浏览: 13
好的,以下是实现这个需求的代码示例:
```python
import threading
class PrintThread(threading.Thread):
def __init__(self, name, start_num, end_num, lock):
super().__init__()
self.name = name
self.start_num = start_num
self.end_num = end_num
self.lock = lock
def run(self):
num = self.start_num
while num <= self.end_num:
with self.lock:
print("{}: {}".format(self.name, num))
num += 1
# 创建一个锁
lock = threading.Lock()
# 创建三个线程
t1 = PrintThread("Thread 1", 1, 5, lock)
t2 = PrintThread("Thread 2", 6, 10, lock)
t3 = PrintThread("Thread 3", 11, 15, lock)
# 启动三个线程
t1.start()
t2.start()
t3.start()
# 等待三个线程结束
t1.join()
t2.join()
t3.join()
# 创建一个列表,存储每个线程最后打印的数字
last_nums = [t1.end_num, t2.end_num, t3.end_num]
# 从线程1开始,依次打印数字,直到打印75
num = max(last_nums) + 1
while num <= 75:
with lock:
print("{}: {}".format(t1.name, num))
num += 1
if num <= 75:
print("{}: {}".format(t2.name, num))
num += 1
if num <= 75:
print("{}: {}".format(t3.name, num))
num += 1
```
上述代码中,我们定义了一个 `PrintThread` 类,继承自 `threading.Thread`,用于打印一段数字区间。在 `run` 方法中,我们使用 `with self.lock` 来保证线程安全,即每次只有一个线程能够打印数字。然后,我们创建三个 `PrintThread` 对象,并分别启动它们。当三个线程都结束后,我们通过记录每个线程最后打印的数字,依次由线程1、2、3打印后续的数字。注意,在打印数字时,我们需要判断当前数字是否已经到达75,如果是,则不再打印。