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

细说多线程之Thread VS Runnable

难度初级
时长 1小时 0分
学习人数
综合评分9.63
171人评价 查看评价
9.8 内容实用
9.6 简洁易懂
9.5 逻辑清晰
举的例子不合适,容易误导别人!继承thread的子类中定义了票数变量,每new一下启动新线程,都会有5张票,把票数变量定义成全局变量试试

已采纳回答 / 鸿泽
可能是因为并非窗口1首先获得CPU时间片,而是其他线程。首先是窗口2 ,执行到count--之后,sysout时就被阻塞了。注意此时count=4。然后是窗口1 ,执行了整个run方法 ,此时count=3。然后是窗口3 ,执行了整个run方法 ,此时count=2。此时窗口2恢复,继count--之后执行,输出count=3。然后是窗口3 ,执行了整个run方法 ,此时count=0。当然这种并不一定是这样,因为现在的多核CPU线程是可以同时执行的。
这个都在误导别人…………
写输出流那里是不是忘了关闭输出流了?
用synchronized?
class MyThread implements Runnable{
Lock lock = new ReentrantLock();
private int number=5;
@Override
public void run() {
lock.lock();
try{
while(number >0){
number--;
System.out.println(Thread.currentThread().getName()+"卖一张剩余票数:"+number);
}
}finally{
lock.unlock();
}
}}要加锁机制

最新回答 / 哀幻暝
<...图片...>补充一个解决办法
PPT怎么做出来的?!!!

最新回答 / 飘游人
extends Thread的例子没有问题。想实现的确实是3个窗口总共有5张票,老师故意用extends Thread的例子,就是为了说明这种方式达不到希望的效果(即实际出现的效果是你所说的“每个窗口拥有5张票”)。老师也在PPT中写明,只有Runnable的方式才适合多个线程处理同一资源的情况。如果硬要用extends Thread来实现效果,确实像你说的可以加static关键字,但老师想告诉我们的是,对于这样的情况,还是用Runnable好。
机关枪~~~
thread代码里主函数那对象实例化和Runnable代码里的主函数对象实例化的代码都不一样,前提条件都不一样,咋比出thread和Runnable的不同啊。
而且我把ticketsRunnable里面的代码implements Runnable换成extends Thread,执行效果一样啊,那Thread和Runnable还有啥区别啊。
线程一刚执行完tick--,还没有执行打印语句,那就算线程还未结束,别的线程怎么能抢走执行权呢?
ticketsCont 前面如果加了static就表示ticketCont是静态变量,静态变量就不是一个对象私有的属性了,相当于thread类的所有实例都共享这个属性
大题小做,感觉不错
这老师代码写的真规范,都是成对的,而且写时的逻辑也很清晰,告诉你为什么要这么写。
课程须知
学习本课程前,你需要熟练掌握Java的基础语法,熟悉Java中创建线程的两种方式,熟悉Java多线程中常用的一些方法。
老师告诉你能学到什么?
1、多线程创建方式的比较和选择 2、线程的生命周期、守护线程

微信扫码,参与3人拼团

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

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

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消