哲学家用餐问题,5位哲学家坐在圆桌旁,每对哲学家之间只有一根筷子。如果一个哲学家可以拿起他旁边的两根筷子,他就可以吃东西。一根筷子可以由其相邻的任何一个哲学家拿起,但不能同时被两个哲学家拿起。
如果遵循一个简单的规则,就可以避免死锁:让所有线程以相同的顺序声明并释放其锁。这样,您永远不会陷入可能发生死锁的情况。
甚至就餐哲学家问题也可以视为违反此规则,因为它使用左右勺子的相对概念,这导致使用不同勺子分配顺序的线程不同。如果勺子的编号是唯一的,而所有的哲学家都试图首先获得编号最小的勺子,那么死锁将是不可能的。
我认为,预防胜于治疗。
这是我喜欢遵循的确保线程正常工作的两个准则之一。另一个是确保每个线程对自己的执行全权负责,因为它是唯一一个在任何时间点都知道自己在做什么的线程。
因此,这意味着没有Thread.stop
调用,请使用全局标志(或消息队列或类似的东西)告诉另一个线程您要采取的措施。然后让该线程执行实际工作。