以下点
sleep()方法不会放弃它获取的锁。
在Java中使用sleep()时,不能保证当睡眠线程醒来时肯定会获得CPU,而是会转到Runnable状态并与其他线程争夺CPU。
如果当前线程没有释放锁定,为什么它必须转到Runnable State并与其他线程竞争执行
答案 0 :(得分:3)
想象一下,CPU是食物处理器,Thread
是厨师。一位厨师正在烹饪鸡尾酒并锁定物品martini
和beer
。另一个Thread
正在烹饪汤并锁定List<Vegetable>
。
想象一下,两位厨师都在争夺食品加工机。它们有自己的对象,它们需要CPU才能处理一个任务。
可运行状态意味着厨师已准备好使用处理器(即清洗Vegetables
或打开瓶子)。无论他有多少物品,任何炊具都可以使用食物处理器。无论有什么锁定,任何进程都可以说“我想使用CPU”。