创建一个多线程程序,模拟多个线程同时访问一个共享资源,确保线程安全性。
时间: 2024-10-14 08:07:21 浏览: 4
创建一个多线程程序来模拟多个线程同时访问共享资源,通常需要使用Java的synchronized关键字、Lock接口或者ReentrantLock来保证线程安全,避免竞态条件(race condition)。这里是一个简单的例子,使用synchronized关键字:
```java
public class SharedResource {
private int count = 0;
public synchronized void increment() {
count++;
System.out.println("Thread " + Thread.currentThread().getName() + " incremented the count to " + count);
}
public synchronized void decrement() {
count--;
System.out.println("Thread " + Thread.currentThread().getName() + " decremented the count to " + count);
}
public static void main(String[] args) {
SharedResource resource = new SharedResource();
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 5; i++) {
resource.increment();
}
});
Thread thread2 = new Thread(() -> {
for (int i = 0; i < 5; i++) {
resource.decrement();
}
});
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
在这个例子中,`increment()` 和 `decrement()` 方法都声明为`synchronized`,这意味着任何时候只有一个线程可以进入这个方法。这样就确保了对共享变量count的操作是原子性的。
阅读全文