帮我写一个代码,要求如下创建两个线程,分别打印传入的两个字符串“Hello”和“World”。编写一个程序,使用同步代码块确保两个线程交替打印数字。
时间: 2024-10-20 11:04:34 浏览: 15
java代码-使用集合ArrayList对字符串进行存储和管理
为了实现这个需求,我们可以使用Java中的`Thread`类以及`synchronized`关键字来控制线程的执行顺序。以下是一个简单的示例:
```java
public class Print交替 {
private int turn = 0; // 用于跟踪哪个线程先打印
public static void main(String[] args) {
Print交替 printer = new Print交替();
Thread thread1 = new Thread(printer::printString1);
Thread thread2 = new Thread(printer::printString2);
thread1.start(); // 启动第一个线程
thread2.start(); // 启动第二个线程
}
public synchronized void printString1() {
while (true) {
if (turn == 1) { // 当轮到我们打印时
System.out.println(Thread.currentThread().getName() + ": Hello");
turn = 2; // 下一个回合轮到另一个线程
break;
}
try {
wait(); // 等待当前线程被唤醒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void printString2() {
while (true) {
if (turn == 2) { // 当轮到我们打印时
System.out.println(Thread.currentThread().getName() + ": World");
turn = 1; // 下一个回合轮到另一个线程
break;
}
try {
wait(); // 等待当前线程被唤醒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
在这个例子中,`printString1` 和 `printString2` 都是同步方法,它们之间共享了`turn`变量来决定谁先打印。当某个线程进入循环后,如果它的回合(turn)不是1,那么它会调用`wait()`让自己挂起并释放锁。此时,另一个线程可以获取锁并执行其相应的方法,然后改变`turn`的值并调用`notifyAll()`通知所有等待该锁的线程。这样,两个线程就可以交替打印"Hello"和"World"了。
阅读全文