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

细说多线程之Thread VS Runnable

难度初级
时长 1小时 0分
学习人数
综合评分9.63
171人评价 查看评价
9.8 内容实用
9.6 简洁易懂
9.5 逻辑清晰
虽然有点小快,但是真心讲得很棒:言简意赅,逻辑清晰!老师,真棒!
我想问下为什么最后那个1线程执行到输出System的时候,那个票数还是3,不应该已经被修改过了吗?
main窗口卖了一张票,剩余票数为4
main窗口卖了一张票,剩余票数为3
main窗口卖了一张票,剩余票数为2
main窗口卖了一张票,剩余票数为1
main窗口卖了一张票,剩余票数为0
八错八错,非要我写五个字。
jstack,涨姿势了!!!
讲的挺浅显易懂!!
老师讲的很清楚,奈斯
英语发音太差了,例子极差
都好厉害啊
即使使用同一个实现Runable接口的对象,也会出现资源竞争,必须要加锁才可以
确实够通俗易懂的,不过就是比较浅显,适合初学者。
蟹蟹老师,老师讲得真好!
不会的东西好多啊....还有就是记不住东西,怎么破?

最赞回答 / Angel若梦
你的代码有两处错误1.用继承Thread的方法实现多线程,需要new多个对象,这也是你在共享变量是加static的原因,所以,你使用的锁对象this是不同的对象,所以不能实现线程的互斥.可以使用该类的字节码对象Ticket.class作为锁对象.2.如果已经实现了互斥,你需要在同步代码块中增加一个判断条件,用来终止程序继续执行,否则会出现打印负数的情况.因为,  未获得锁的线程会在循环内等待,当一条线程将tickets--到0的时候,其他等待的线程获得锁以后会继续执行后续代码,导致运行结果不准确.
举的例子不合适,容易误导别人!继承thread的子类中定义了票数变量,每new一下启动新线程,都会有5张票,把票数变量定义成全局变量试试
课程须知
学习本课程前,你需要熟练掌握Java的基础语法,熟悉Java中创建线程的两种方式,熟悉Java多线程中常用的一些方法。
老师告诉你能学到什么?
1、多线程创建方式的比较和选择 2、线程的生命周期、守护线程

微信扫码,参与3人拼团

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

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

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消