AtomicInteger amount = new AtomicInteger(0);
时间: 2023-10-19 17:26:15 浏览: 71
这段代码创建了一个名为amount的AtomicInteger对象,初始值为0。 AtomicInteger是Java中的一个原子类,它提供了原子操作来保证多线程环境下的安全性。它可以用于实现线程安全的计数器或者加锁机制。在这个例子中,amount可以被多个线程并发地访问和修改,而不会出现竞态条件的问题。
相关问题
Private int money=0; 任务: 1)构建10条线程,奇数线程每增加一次钱,而偶数线程每减少一次钱 2)使用P()和V()实现同步,保证钱数不为负且大于10。 3)每次操作打印Thread-ID。 4)(追加标记)依次运行
这是一个典型的并发编程和同步控制的问题,在Java中可以使用synchronized关键字、AtomicInteger以及守护线程(daemon thread)来解决:
```java
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
private AtomicInteger money = new AtomicInteger(0); // 使用AtomicInteger避免数据竞争
public class Account {
private final Object lock = new Object(); // 创建互斥锁
public void deposit(int amount, Thread thread) {
synchronized (lock) {
if (money.get() + amount > 10) {
System.out.println(thread.getName() + "尝试存款:" + amount + ",余额:" + money.incrementAndGet());
} else {
System.out.println(thread.getName() + "拒绝存款,余额:" + money);
}
}
}
public void withdraw(int amount, Thread thread) {
synchronized (lock) {
if (money.get() - amount >= 0) {
System.out.println(thread.getName() + "尝试取款:" + amount + ",余额:" + money.decrementAndGet());
} else {
System.out.println(thread.getName() + "拒绝取款,余额:" + money);
}
}
}
}
public class Main {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(10); // 创建固定大小线程池
Account account = new Account();
for (int i = 0; i < 10; i++) {
Thread thread = new Thread(() -> {
if (i % 2 == 0) { // 偶数线程减钱
account.withdraw(i, thread);
} else { // 奇数线程加钱
account.deposit(i, thread);
}
});
thread.setDaemon(true); // 设置为守护线程,主线程结束时自动关闭
executor.execute(thread);
}
executor.shutdown();
}
}
```
阅读全文