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

讲师回答 / Arthur
run()其实是Runnable的成员函数,自己并不是Thread。你如果习惯用this,说明你总是在继承Thread类。如果你通过Runnable的方式初始化一个线程,你自然就不会用this鸟。

讲师回答 / Arthur
%10.2f只说明位数和精度,并不强制要求占满。如果要求部位前面加0

讲师回答 / Arthur
首先从语法上,lockObj换成energyBoxes是可以的,不过易读性是否降低你要考虑了。第二点,效率要让位于安全。如果多个资源是无关的,自然可以不同的锁来互斥(那为什么要放在同一个类里面呢?恐怕要反思设计了),如果资源对线程的访问有严格的互斥约束,那么就不能有多个锁对象。

讲师回答 / Arthur
在wait set中的对象并不会竞争lockObj。只有当其他线程调用notifyAll后他们才有机会竞争lockObj。

讲师回答 / Arthur
问题还是回到interrupte()方法的初衷,这个方法是用来向线程发出中断请求,而非停止线程的。当然很多时候要停止线程就需要先给他一个中断请求,然后让线程处理中断(比如处理InterruptedException)。在你提到的shutdownNow中,我们看到调用interruptWorkers()也是这个意思,让所有的worker线程有机会处理中断。紧接着,tryTerminate()回去做停止的工作。public List<Runnable> shutdownNow() {       ...

已采纳回答 / Arthur
你可以理解为,run方法仅仅提供了业务逻辑,而线程运行是有更复杂要求的。这一切都封装在了Thread内部。所以记住一定不要自己调用run,而是调用start方法。

讲师回答 / Arthur
用心做的啊-0|0-

已采纳回答 / Arthur
本质是你得线程被连接网络的I/O阻塞了。你可以考虑一些非阻塞的方法,看看NIO里有没有相关的类吧。

讲师回答 / Arthur
wait之后要释放锁的,然后唤醒并获得了锁之后,是从上一次调用wait()的地方之后开始执行,这样if将不能阻挡不合要求的处理。

已采纳回答 / Arthur
你得理解是正确的,这就是为什么使用了一个while循环来阻挡不符合条件的操作。每次被唤醒并获得锁后,都是从wait之后的地方继续循环。
课程须知
本课程的学习,需要小伙伴们具有面向对象基础知识及 Java 语言基础。如果您是新手,建议先移步 《Java入门第一季》和《Java入门第二季》
老师告诉你能学到什么?
1、Java 中如何使用线程 2、什么是争用条件 3、线程如何交互

微信扫码,参与3人拼团

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

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

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消