关于多个线程操作同一个变量的问题

关于多个线程操作同一个变量的问题

这是一道多线程的问题

img

以下是问题相关代码
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;
    }
}
运行结果及报错内容

img

img

如图 每次运行结果都是不同且是错误的 因为我就创建了400个红包
请问该如何解决呢

因为你没加线程锁啊
而--操作是线程不安全的