利用多线程及同步方法,编写一个简单的抢红包程序: (1) 红包数量固定,可用ArrayList存储红包,其中,每个元素表示一个红包; (2)启动多个线程抢红包,每个线程可以重复抢红包,每抢走一个红包,当前红包总数减少1; (3)输出线程名以及该线程抢到的红包总数。 利用多线程及同步方法,编写一个简单的抢红包程序: (1) 红包数量固定,可用ArrayList存储红包,其中,每个元素表示一个红包; (2)启动多个线程抢红包,每个线程可以重复抢红包,每抢走一个红包,当前红包总数减少1; (3利用多线程及同步方法,编写一个简单的抢红包程序: (1) 红包数量固定,可用ArrayList存储红包,其中,每个元素表示一个红包; (2)启动多个线程抢红包,每个线程可以重复抢红包,每抢走一个红包,当前红包总数减少1; (3)输出线程名以及该线程抢到的红包总数。 )输出线程名以及该线程抢到的红包总数。
时间: 2024-04-09 11:28:01 浏览: 76
以下是一个使用多线程和同步方法实现的简单抢红包程序:
```java
import java.util.ArrayList;
class RedPacket {
private ArrayList<Integer> redPackets;
public RedPacket(int num) {
redPackets = new ArrayList<>();
for (int i = 0; i < num; i++) {
redPackets.add(1);
}
}
public synchronized int grabRedPacket() {
if (redPackets.isEmpty()) {
return 0;
}
int index = redPackets.size() - 1;
int redPacket = redPackets.get(index);
redPackets.remove(index);
return redPacket;
}
}
class GrabRedPacketThread extends Thread {
private RedPacket redPacket;
public GrabRedPacketThread(RedPacket redPacket) {
this.redPacket = redPacket;
}
public void run() {
int count = 0;
while (true) {
int packet = redPacket.grabRedPacket();
if (packet == 0) {
break;
}
count += packet;
}
System.out.println(Thread.currentThread().getName() + "抢到了" + count + "个红包");
}
}
public class Main {
public static void main(String[] args) {
int numRedPackets = 10;
RedPacket redPacket = new RedPacket(numRedPackets);
int numThreads = 5;
for (int i = 0; i < numThreads; i++) {
GrabRedPacketThread thread = new GrabRedPacketThread(redPacket);
thread.start();
}
}
}
```
这个程序创建了一个RedPacket类来表示红包,其中使用ArrayList存储红包。grabRedPacket() 方法使用 synchronized 关键字来保证多个线程在抢红包时的互斥访问。
程序中创建了5个线程来抢红包,每个线程会重复抢红包直到没有红包可抢。每个线程抢到的红包数量会累加,并在最后输出线程名以及抢到的红包总数。
注意:这只是一个简单的示例程序,实际应用中可能需要更复杂的逻辑和数据结构来实现真实的抢红包功能。
阅读全文