讲师回答 / Arthur
run()其实是Runnable的成员函数,自己并不是Thread。你如果习惯用this,说明你总是在继承Thread类。如果你通过Runnable的方式初始化一个线程,你自然就不会用this鸟。
2015-01-15
讲师回答 / Arthur
首先从语法上,lockObj换成energyBoxes是可以的,不过易读性是否降低你要考虑了。第二点,效率要让位于安全。如果多个资源是无关的,自然可以不同的锁来互斥(那为什么要放在同一个类里面呢?恐怕要反思设计了),如果资源对线程的访问有严格的互斥约束,那么就不能有多个锁对象。
2015-01-14
讲师回答 / Arthur
问题还是回到interrupte()方法的初衷,这个方法是用来向线程发出中断请求,而非停止线程的。当然很多时候要停止线程就需要先给他一个中断请求,然后让线程处理中断(比如处理InterruptedException)。在你提到的shutdownNow中,我们看到调用interruptWorkers()也是这个意思,让所有的worker线程有机会处理中断。紧接着,tryTerminate()回去做停止的工作。public List<Runnable> shutdownNow() { ...
2015-01-07
已采纳回答 / Arthur
你可以理解为,run方法仅仅提供了业务逻辑,而线程运行是有更复杂要求的。这一切都封装在了Thread内部。所以记住一定不要自己调用run,而是调用start方法。
2015-01-05