有道面试题,说500人抢50个红包,有什么技术难点,有怎么实现啊?
LuckMoney类:
public class LuckMoney implements Runnable {
private static int num = 50;
private static Random random = new Random();
// 返回红包金额(1 - 5 元)
private static double getMoney() {
Double money = random.nextDouble() * 5 + 1;
String interval = money.toString().substring(0, 4);
return Double.parseDouble(interval);
}
@Override
public synchronized void run() {
if(num >= 1) {
num--;
System.out.println(Thread.currentThread().getName() + "拿了一个" + "红包金额:" + getMoney() + ", 剩余红包数:" + num);
}
}
}
Person类:
public class Person extends Thread {
private LuckMoney luckMoney;
public Person(LuckMoney luckMoney) {
this.luckMoney = luckMoney;
}
public void run() {
luckMoney.run();
}
}
Demo类:
public class Demo {
public static void main(String[] args) {
LuckMoney money = new LuckMoney();
Person person = new Person(money);
for (int i = 0; i < 500; i++) {
new Thread(person, i + "号人").start();
}
}
}