线程的死锁和阻塞共同点:线程都是处于等待状态。
不同点:
|- 常见的 造成阻塞的原因有:
|- 线程自己调用了sleep()方法 进行睡眠。
|- 线程自己调用了wait()方法 进行等待。
|- 线程等待用户输入或输出操作时 同样会阻塞。
|- 相应的解决方法有:
|- 等待睡眠时间结束 或其他线程调用interrupt()方法将其唤醒。
|- 等待它等待的时间结束 或其他线程调用notify()、notifyAll()将其唤醒。
|- 等待用户输入或输出结束。
关于死锁:说白了就是:You first,You first问题。
双方谁都不愿意先做,导致最终相互等待。
比如说:
• 抢劫犯要求: 你们先给我钱,我放人。
• 受害者家属要求: 你先放人,我们给你钱。
最终结果就是 相互僵持着。
换句话说,阻塞是由于 “程序的需要”,才产生的。而死锁则是由于,“临界资源不足”造成的。
所谓的临界资源,即“同一时间只允许一个线程占有的资源,其他线程必须等待该线程放弃该资源后,才可以使用该资源”。
因此,死锁产生的原因:
|- 线程A占有一个临界资源,线程B也占有一个临界资源。
|- A和B都不想放弃自己的资源,同时又想占有对方的资源。然后就互相等待,等待对方先放弃资源。
[ 本帖最后由 cxy_zy 于 2011-07-18 17:27 编辑 ] |