有100份礼品,小红,小明两人同时发送,当剩下的礼品小于10份的时候则不再送出,利用多线程模拟该过程并将线程的名称打印出来。并最后在控制台分别打印小红,小明各自送出多少分礼物。 请使用多线程来完成这个案例
时间: 2024-04-21 12:23:03 浏览: 142
多线程发送数据
4星 · 用户满意度95%
好的,这是一个使用Java多线程模拟礼品发送的案例。我们可以创建两个线程,分别代表小红和小明,让它们同时发送礼品。当剩下的礼品小于10份时,线程停止发送。
```java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class GiftSendingThread extends Thread {
private static int gifts = 100;
private static Lock lock = new ReentrantLock();
private String name;
public GiftSendingThread(String name) {
this.name = name;
}
@Override
public void run() {
while (gifts >= 10) {
lock.lock();
if (gifts >= 10) {
gifts -= 10;
System.out.println(name + "送出了10份礼物,剩余" + gifts + "份");
}
lock.unlock();
}
}
public static void main(String[] args) throws InterruptedException {
Thread redThread = new GiftSendingThread("小红");
Thread mingThread = new GiftSendingThread("小明");
redThread.start();
mingThread.start();
redThread.join();
mingThread.join();
System.out.println("小红送出了" + (100 - gifts) + "份礼物");
System.out.println("小明送出了" + (100 - gifts) + "份礼物");
}
}
```
在这个例子中,我们使用了一个静态变量`gifts`来表示剩余的礼品数量,并使用`ReentrantLock`来保护对`gifts`变量的访问。
通过创建两个`GiftSendingThread`线程分别代表小红和小明,当礼品数量大于等于10时,线程将一次性送出10份礼物并更新剩余礼品数量。当礼品数量小于10时,线程停止发送。
最后,在控制台分别打印小红和小明各自送出多少份礼物。
阅读全文