java 三个线程交替打印详解
时间: 2023-09-08 07:02:27 浏览: 182
进程与线程的三要素-java全部课件
Java三个线程交替打印可以使用经典的信号量机制来实现。首先,我们需要创建一个共享的信号量对象并初始化为1,用来保证三个线程的顺序执行。然后,我们创建一个打印任务类,实现Runnable接口,并重写run方法。在run方法中,我们使用信号量进行线程的控制。
具体的实现步骤如下:
1. 创建一个信号量对象,并初始化为1,用来控制线程的顺序执行。
Semaphore semaphore = new Semaphore(1);
2. 创建一个打印任务类,实现Runnable接口,并重写run方法。
class PrintTask implements Runnable {
private String message;
private Semaphore current;
private Semaphore next;
public PrintTask(String message, Semaphore current, Semaphore next) {
this.message = message;
this.current = current;
this.next = next;
}
public void run() {
try {
for (int i = 0; i < 10; i++) {
// 获取当前信号量的许可
current.acquire();
// 打印当前信息
System.out.print(message);
// 释放下一个信号量的许可
next.release();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
3. 创建三个打印任务对象,并指定当前信号量和下一个信号量的顺序。
Semaphore semaphoreA = new Semaphore(1);
Semaphore semaphoreB = new Semaphore(0);
Semaphore semaphoreC = new Semaphore(0);
Runnable printTaskA = new PrintTask("A", semaphoreA, semaphoreB);
Runnable printTaskB = new PrintTask("B", semaphoreB, semaphoreC);
Runnable printTaskC = new PrintTask("C", semaphoreC, semaphoreA);
4. 创建三个线程,并分别启动这三个线程。
Thread threadA = new Thread(printTaskA);
Thread threadB = new Thread(printTaskB);
Thread threadC = new Thread(printTaskC);
threadA.start();
threadB.start();
threadC.start();
通过上述步骤,我们创建了三个信号量和三个打印任务,实现了三个线程的交替打印。其中,Semaphore类的acquire方法用于获取一个许可,如果没有许可则阻塞,release方法用于释放一个许可。通过不同的信号量控制线程的顺序执行,从而实现了线程的交替打印。
阅读全文