编写程序实现并发10个线程对global变量x进行加3操作后输出显示,并使用Lock对象实现线程同步
时间: 2024-09-29 20:04:51 浏览: 20
在编写程序实现并发10个线程对全局变量`x`进行加3操作并保证线程安全时,可以利用Java的synchronized关键字或者Lock接口来实现线程同步。这里我们先简单解释下原理,然后给出一个使用`java.util.concurrent.locks.ReentrantLock`的例子。
**原理**:
- 并发环境下的全局变量`x`如果没有锁保护,在多线程环境下可能会导致数据不一致,因为多个线程会同时读写它。
- `synchronized`关键字可以确保在同一时刻只有一个线程访问特定的代码块,实现了原子性的修改。
- 使用`ReentrantLock`更灵活,因为它提供了tryLock()、lock()等方法,可以控制锁的获取和释放。
**示例代码**(使用`ReentrantLock`):
```java
import java.util.concurrent.locks.ReentrantLock;
public class GlobalCounter {
private static int x = 0;
private static final ReentrantLock lock = new ReentrantLock();
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(() -> incrementGlobalX()).start();
}
}
private static void incrementGlobalX() {
try {
lock.lock(); // 获取锁
x += 3; // 线程安全地更新x
System.out.println("After increment: " + x);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock(); // 释放锁
}
}
}
```
在这个例子中,每个线程都会尝试获取`lock`,只有获得锁的线程才能更新`x`。其他等待的线程会在当前线程完成操作后继续执行。