用java语言建立三个线程,A线程打印5次E,B线程打印5次D,C线程打印5次U,要求线程同时运行,交替打印5次EDU。
时间: 2023-06-13 13:04:23 浏览: 139
下面是一个实现该功能的Java代码:
```java
public class PrintThreadDemo {
public static void main(String[] args) {
PrintThread threadA = new PrintThread("E", 5);
PrintThread threadB = new PrintThread("D", 5);
PrintThread threadC = new PrintThread("U", 5);
threadA.setNextThread(threadB);
threadB.setNextThread(threadC);
threadC.setNextThread(threadA);
threadA.start();
threadB.start();
threadC.start();
}
static class PrintThread extends Thread {
private String content;
private int count;
private PrintThread nextThread;
public PrintThread(String content, int count) {
this.content = content;
this.count = count;
}
public void setNextThread(PrintThread nextThread) {
this.nextThread = nextThread;
}
@Override
public void run() {
for (int i = 0; i < count; i++) {
synchronized (this) {
System.out.print(content);
this.notifyAll();
}
synchronized (nextThread) {
try {
nextThread.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
```
该代码中,我们定义了一个 `PrintThread` 类,它继承了 `Thread` 类,代表一个打印线程。每个打印线程包含一个待打印的字符串和打印次数。并且,我们为每个打印线程设置了一个 `nextThread` 属性,表示该线程执行完后需要通知的下一个线程。
线程的 `run()` 方法中,我们使用 `synchronized` 关键字来保证线程安全。每次打印完字符串后,该线程会调用 `notifyAll()` 方法通知其他线程可以运行了。然后,该线程会等待下一个线程的通知,此时我们使用 `wait()` 方法来释放该线程的锁,让其他线程可以执行。当下一个线程得到锁并执行完后,它会再次调用 `notifyAll()` 方法通知其他线程可以执行了。
最后,我们在主线程中创建三个 `PrintThread` 对象,并将它们按照顺序连接起来,即线程A的下一个是线程B,线程B的下一个是线程C,线程C的下一个是线程A。然后,我们依次启动这三个线程,它们会交替打印出EDU这三个字符串,每个字符串打印5次。
阅读全文