JAVA中多线程读取成员变量的重复问题
这是个模拟卖票的问题,使用一个对象实现Runnable接口建立四个线程,这个对象有100张票,四个进程同时卖,因为没使用锁,所以会出现负数票,但是为什么会出现相同的票呢?...
这是个模拟卖票的问题,使用一个对象实现Runnable接口建立四个线程,这个对象有100张票,四个进程同时卖,因为没使用锁,所以会出现负数票,但是为什么会出现相同的票呢?8号票卖了四次,是因为成员变量在if之后进栈保存了值?然后直接用这个num输出吗?
代码:
输出: 展开
代码:
输出: 展开
4个回答
展开全部
1.使用 num常量时 请同步 synchronized
2.或者整个逻辑建议使用 java.util.concurrent.ExecutorService
2.或者整个逻辑建议使用 java.util.concurrent.ExecutorService
追问
谢谢
追答
代码结果都错了 楼下还特么的跟我说【synchronized 关键字效率很低,注意不要乱用】你不用试试看能解决问题不
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用java的synchronized 关键字可以避免这个问题,为什么输出了四次,其实这个次数不固定,只是说有别的线程和本线程同事读取了一个变量而已,而且在读取过程中其他线程还没有来得及修改这个变量,
这本质就是对线程的问题,synchronized 关键字效率很低,注意不要乱用
这本质就是对线程的问题,synchronized 关键字效率很低,注意不要乱用
追问
谢谢
追答
嗯
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
卖出同样的票和你出现负数,是一个情况,都是因为没有锁
追问
谢谢,这个我知道
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询