有三个线程,分别只能打印A,B和C 要求按顺序打印ABC,打印10次
时间: 2023-10-08 22:05:11 浏览: 149
Java多线程连续打印abc实现方法详解
可以使用信号量来实现三个线程按顺序打印ABC的需求,每个线程持有一个信号量,控制打印的顺序。
具体实现如下:
```python
import threading
class PrintABC:
def __init__(self):
self.count = 10
self.sem_a = threading.Semaphore(1) # 线程A的信号量,初始值为1
self.sem_b = threading.Semaphore(0) # 线程B的信号量,初始值为0
self.sem_c = threading.Semaphore(0) # 线程C的信号量,初始值为0
def print_a(self):
for i in range(self.count):
self.sem_a.acquire() # 获取信号量
print('A', end='')
self.sem_b.release() # 释放下一个信号量
def print_b(self):
for i in range(self.count):
self.sem_b.acquire() # 获取信号量
print('B', end='')
self.sem_c.release() # 释放下一个信号量
def print_c(self):
for i in range(self.count):
self.sem_c.acquire() # 获取信号量
print('C', end='')
self.sem_a.release() # 释放下一个信号量
if __name__ == '__main__':
p = PrintABC()
t1 = threading.Thread(target=p.print_a)
t2 = threading.Thread(target=p.print_b)
t3 = threading.Thread(target=p.print_c)
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
```
这里定义了一个 `PrintABC` 类,其中包含三个方法 `print_a`、`print_b` 和 `print_c`,分别用来打印字母 A、B 和 C。每个方法中都使用了信号量来控制打印的顺序,其中线程 A 的信号量初始值为 1,而线程 B 和线程 C 的信号量初始值都为 0。
在 `print_a` 方法中,线程 A 先获取信号量,打印字母 A,然后释放线程 B 的信号量,以此类推。
最后,启动三个线程并等待它们结束,输出的结果为:
```
ABCABCABCABCABCABCABCABCABCABC
```
阅读全文