java多线程环境取最大值代码实现
时间: 2023-08-20 20:04:14 浏览: 157
下面是一个使用互斥锁实现在多线程环境下取最大值的 Java 代码示例(使用 `synchronized` 关键字实现互斥锁):
```java
import java.util.Arrays;
public class FindMax {
private static int maxNum = Integer.MIN_VALUE; // 初始值为整型最小值
public static synchronized void updateMax(int num) {
if (num > maxNum) {
maxNum = num;
}
}
public static void main(String[] args) throws InterruptedException {
int[] nums = {2, 5, 8, 1, 9, 4};
// 创建两个线程分别查找最大值
Thread t1 = new Thread(() -> {
for (int num : nums) {
updateMax(num);
}
});
Thread t2 = new Thread(() -> {
for (int num : nums) {
updateMax(num);
}
});
// 启动两个线程
t1.start();
t2.start();
// 等待两个线程结束
t1.join();
t2.join();
System.out.println("The max number is: " + maxNum);
}
}
```
在上面的代码中,我们使用了 `synchronized` 关键字来实现互斥锁。在 `updateMax` 方法中,我们使用 `synchronized` 关键字修饰该方法,这样就可以确保在任意时刻只有一个线程能够修改最大值,避免了多线程竞争导致的数据不一致问题。然后在两个线程中分别遍历数组,并调用 `updateMax` 方法来更新最大值。最后等待两个线程结束,输出最大值即可。
阅读全文