这是一道多线程的问题
public class Main {
public static void main(String[] args) {
for (int i = 0; i < HongBao.hongBao.wechatMembers.length; i++) { //根据成员数依次启动线程
new Thread(HongBao.hongBao.wechatMembers[i]).start();
}
}
}
class WechatMembers implements Runnable {
static WechatMembers[] wechatMembers = {new WechatMembers("小明"), new WechatMembers("小花"), new WechatMembers("小刚"), new WechatMembers("小华")};
String name;//成员名称
int countNumber = 0;//抢到的红包总数
int amount = 0;//总金额
public WechatMembers(String name) {
this.name = name;
}
public void HongBao() {
while (HongBao.hongBao.quantity > 0) { //红包数大于0就不断的抢红包
HongBao.hongBao.quantity--;//剩余红包数-1
countNumber++; //抢到红包数+1
}
amount = HongBao.hongBao.counter * countNumber;//抢到红包的总金额
System.out.println(this);//打印出抢到的红包数
}
@Override
public void run() {
HongBao();
}
@Override
public String toString() {
return name + "抢到了" + countNumber + "个红包,总计:" + amount + "元";
}
}
class HongBao {
static HongBao hongBao = new HongBao(WechatMembers.wechatMembers /* 该属性为微信成员类的静态属性 */, 400, 1); //所有的线程都来抢这个红包
WechatMembers[] wechatMembers;//成员
Integer quantity;//红包个数
Integer counter;//红包金额
public HongBao(WechatMembers[] wechatMembers, Integer quantity, Integer counter) {
this.wechatMembers = wechatMembers;
this.quantity = quantity;
this.counter = counter;
}
}
如图 每次运行结果都是不同且是错误的 因为我就创建了400个红包
请问该如何解决呢
因为你没加线程锁啊
而--操作是线程不安全的