java线程类的代码:假设桌面上有100个苹果 每个小朋友一次可以随机拿走1-5个苹果 直到桌面上的苹果全部被拿走为止
时间: 2024-03-09 08:48:09 浏览: 64
1、定义线程,工作:生成10个1--100的随机数,并计算平均数
以下是一个可能的解决方案,使用Java线程类:
```java
import java.util.concurrent.ThreadLocalRandom;
public class ApplePickingGame {
private static volatile int applesLeft = 100;
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(new Child(i)).start();
}
}
static class Child implements Runnable {
private final int id;
Child(int id) {
this.id = id;
}
@Override
public void run() {
while (applesLeft > 0) {
int applesToPick = ThreadLocalRandom.current().nextInt(1, 6);
synchronized (ApplePickingGame.class) {
if (applesLeft < applesToPick) {
applesToPick = applesLeft;
}
applesLeft -= applesToPick;
}
System.out.println("Child " + id + " picked " + applesToPick + " apples. " + applesLeft + " apple(s) left on the table.");
try {
Thread.sleep(100); // wait for other children to pick apples
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
}
```
该程序使用了一个静态的 `applesLeft` 变量来表示桌面上剩余的苹果数目。每个孩子都是一个独立的线程,通过随机数选择要拿走的苹果数目,并使用 synchronized 块来保证线程安全。当桌面上的苹果数目为 0 时,所有孩子都会退出循环并结束线程。
阅读全文