为了账号安全,请及时绑定邮箱和手机立即绑定

细说多线程之Thread VS Runnable

难度初级
时长 1小时 0分
学习人数
综合评分9.63
171人评价 查看评价
9.8 内容实用
9.6 简洁易懂
9.5 逻辑清晰
窗口2卖了一张票,剩余票数为:3

窗口3卖了一张票,剩余票数为:2

窗口3卖了一张票,剩余票数为:1

窗口3卖了一张票,剩余票数为:0

窗口1卖了一张票,剩余票数为:3
最后一个、个剩余票数明显不对啊
这有什么优劣么...
@Wweison要保证线程的安全性,很明显是需要加同步的,很多初学者也问到了这个问题,你可以在问答里面看下!我这里之所以没加同步,是因为《深入浅出java多线程》中已经对同步做了讲解,所以我这里没必要重复讲解,课程的重点不在这里,同时这样也可以留给大家一点思考的和改进的余地!
我用那个代码,还出现这种结果,感觉应该加锁
窗口2卖了一张票,剩余票数为:3
窗口3卖了一张票,剩余票数为:2
窗口3卖了一张票,剩余票数为:1
窗口3卖了一张票,剩余票数为:0
窗口1卖了一张票,剩余票数为:3
老师说话语速快哈
大赞!学到东西了,有些地方不是太懂,感觉好厉害的样子,要继续加油,提高自己的水平。
jstack,涨姿势了!!!
厉害!!!长见识了!
简单明了,大爱
线程应该不是执行完ticketsCont--这句话就被其它线程抢去了,应该是执行完System.out.println里面的字符串的生成 才被抢去的
语数有点快...

讲师回答 / MartonZhang
你好,ticketsCont是实例变量,它的值自然是存在堆中(每个java对象在堆中都会占据一定内存,而实例变量的值就是存储在这块内存中,类似于结构体,因此每个对象对应一个ticketsCont的值),ticketsCont跟值传递没有关系啊,如果是Runnable方式的话,传递的也只是MyThread对象引用的副本,不管ticketsCont的事,但是因为ticketsCont的值在引用和引用副本所指向的堆内存中,所以无论是引用还是引用副本改变了堆内存中ticketsCont的值,都会产生效果!
说的挺详细的,不错!!
课程须知
学习本课程前,你需要熟练掌握Java的基础语法,熟悉Java中创建线程的两种方式,熟悉Java多线程中常用的一些方法。
老师告诉你能学到什么?
1、多线程创建方式的比较和选择 2、线程的生命周期、守护线程

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消