定义两个事务, 要求两个事务抢一张车票,其中只能有一个事务抢到票。(tickets用 来存储车票)使用java语言
时间: 2023-05-17 21:07:15 浏览: 54
可以定义两个线程来模拟两个事务,每个线程都会尝试抢票,只有一个线程能够成功抢到票。以下是一个简单的示例代码:
```java
import java.util.concurrent.atomic.AtomicInteger;
public class TicketTransaction implements Runnable {
private static AtomicInteger tickets = new AtomicInteger(1);
private String name;
public TicketTransaction(String name) {
this.name = name;
}
public void run() {
int ticket = tickets.getAndDecrement();
if (ticket > 0) {
System.out.println(name + " 抢到了一张票");
} else {
System.out.println(name + " 没有抢到票");
}
}
public static void main(String[] args) {
Thread t1 = new Thread(new TicketTransaction("事务1"));
Thread t2 = new Thread(new TicketTransaction("事务2"));
t1.start();
t2.start();
}
}
```
在上面的代码中,使用了一个原子整数来表示剩余的车票数量,每个线程都会尝试获取一个票,如果成功获取到票,就会将票数减一,并输出抢到票的信息。如果没有票了,就会输出没有抢到票的信息。由于使用了原子整数,所以不需要担心线程安全问题。