死锁是指多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。因为线程被无限期地阻塞,因此程序不可能正常终止。
导致死锁的根源在于不适当地运用“synchronized”关键词来管理线程对特定对象的访问。“synchronized”关键词的作用是,确保在某个时刻只有一个线程被允许执行特定的代码块,因此,被允许执行的线程首先必须拥有对变量或对象的独自访问权。当线程访问对象时,线程会给对象加锁,而这个锁导致其它也想访问同一对象的线程被阻塞,直至第一个线程释放它加在对象上的锁。 如果在线程访问对象时,遇到了其他线程的锁,而这个锁还没有被释放,那么该线程虽然对操作对象加上了锁,但无法访问,而其他对象因为该线程的存在也无法操作该对象了。 |