java编写一个有两个线程的程序,第一个线程用来计算1~100之间的偶数及个数, 第二个线程用来计算1-100之间的奇数及个数。
时间: 2024-12-23 18:15:29 浏览: 5
Java多线程程序设计
在Java中,可以使用`Thread`类创建两个独立的线程,并通过`synchronized`关键字或者`java.util.concurrent`包下的工具如`Semaphore`来保证两个线程的安全操作,防止数据竞争。下面是一个简单的示例:
```java
public class OddEvenCounter {
private static int evenCount = 0;
private static int oddCount = 0;
private static final Object lock = new Object();
public static void main(String[] args) {
Thread evenThread = new Thread(() -> countOddAndEven(2, 100, evenCount, lock));
Thread oddThread = new Thread(() -> countOddAndEven(1, 100, oddCount, lock));
evenThread.start();
oddThread.start();
try {
evenThread.join(); // 等待evenThread完成
oddThread.join(); // 再等待oddThread完成
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("偶数个数: " + evenCount);
System.out.println("奇数个数: " + oddCount);
}
private static synchronized void countOddAndEven(int start, int end, int counter, Object lock) {
for (int i = start; i <= end; i++) {
if (i % 2 == 0) { // 如果是偶数
counter++;
synchronized (lock) { // 使用锁确保互斥访问
evenCount++; // 更新计数
}
} else { // 如果是奇数
synchronized (lock) { // 同样获取锁
oddCount++; // 更新计数
}
}
}
}
}
```
在这个例子中,`countOddAndEven`方法被synchronized修饰,确保了两个线程对计数器的更新是原子的。注意每个线程都需要锁定锁对象才能修改计数器。
阅读全文