三个线程同时执行一个run方法打印一道一百 并且线程是安全的用synchronized和while循环的代码
时间: 2023-06-14 09:03:45 浏览: 57
可以使用以下代码实现:
```java
public class PrintNumber implements Runnable {
private static int number = 1;
private static final Object lock = new Object();
@Override
public void run() {
while (number <= 100) {
synchronized (lock) {
if (number % 3 == 0 && Thread.currentThread().getName().equals("Thread-0")) {
System.out.println(Thread.currentThread().getName() + " " + number++);
} else if (number % 3 == 1 && Thread.currentThread().getName().equals("Thread-1")) {
System.out.println(Thread.currentThread().getName() + " " + number++);
} else if (number % 3 == 2 && Thread.currentThread().getName().equals("Thread-2")) {
System.out.println(Thread.currentThread().getName() + " " + number++);
}
}
}
}
public static void main(String[] args) {
PrintNumber printNumber = new PrintNumber();
Thread thread1 = new Thread(printNumber, "Thread-0");
Thread thread2 = new Thread(printNumber, "Thread-1");
Thread thread3 = new Thread(printNumber, "Thread-2");
thread1.start();
thread2.start();
thread3.start();
}
}
```
这个代码使用了一个静态变量 `number` 来记录当前需要打印的数字,使用一个 `lock` 对象来进行同步。每个线程在进入代码块时,会首先判断当前需要打印的数字是否是自己负责打印的,如果是,则打印并将 `number` 加 1,否则释放锁并等待。使用 `while` 循环来保证在所有线程打印完 100 后退出循环。