用java构造三个线程对象,分别输出80以内的2、3、5的倍数。让程序执行3次,对3次运行结果进行分析。
时间: 2024-03-04 16:49:23 浏览: 40
好的,下面是使用 Java 代码实现:
```java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Main {
private static Lock lock = new ReentrantLock(); // 互斥锁
public static void main(String[] args) {
Thread t1 = new Thread(() -> printMultiples(2));
Thread t2 = new Thread(() -> printMultiples(3));
Thread t3 = new Thread(() -> printMultiples(5));
for (int i = 0; i < 3; i++) {
t1.start();
t2.start();
t3.start();
try {
t1.join();
t2.join();
t3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private static void printMultiples(int num) {
for (int i = 1; i <= 80; i++) {
if (i % num == 0) {
lock.lock(); // 加锁
System.out.println(num + " * " + (i / num) + " = " + i);
lock.unlock(); // 解锁
}
}
}
}
```
在 Java 中,我们同样使用了互斥锁 `ReentrantLock` 来保证线程安全。在 `printMultiples` 函数中,我们使用了 `lock.lock()` 加锁,然后输出结果,最后使用 `lock.unlock()` 解锁。
在 `main` 函数中,我们使用 `for` 循环执行三次,每次循环启动三个线程对象 `t1`、`t2`、`t3`,然后使用 `t1.join()`、`t2.join()`、`t3.join()` 等待三个线程执行完毕。
同样地,由于每次输出的结果可能会有所不同,需要你自己进行多次运行和分析。
阅读全文