讲师回答 / Arthur
你得结果也是正常的。简单说只有Running的线程拥有CPU,CPU时间片用完就释放。这就是为什么还没调用sleep(),另一个线程就执行了。要把整个问题说清楚需要了解Java线程的状态及迁移的知识。你可以参考慕课上的《细说Java多线程》
2015-02-21
讲师回答 / Arthur
用了volatile,你在这里写入keepRunning的值,run里面的while才能结束。不用volatile,run里面的while很有可能停不下来。具体你可以去Wiki看看。
2015-02-21
讲师回答 / Arthur
run()其实是Runnable的成员函数,自己并不是Thread。你如果习惯用this,说明你总是在继承Thread类。如果你通过Runnable的方式初始化一个线程,你自然就不会用this鸟。
2015-01-15
讲师回答 / Arthur
首先从语法上,lockObj换成energyBoxes是可以的,不过易读性是否降低你要考虑了。第二点,效率要让位于安全。如果多个资源是无关的,自然可以不同的锁来互斥(那为什么要放在同一个类里面呢?恐怕要反思设计了),如果资源对线程的访问有严格的互斥约束,那么就不能有多个锁对象。
2015-01-14