死锁不一定发生,但是发生了死锁,程序一定玩完。所谓死锁就是二个线程都持有一个对象锁,同时又要去拿对方的锁。这种时就可能发生死锁。因为很可能双方持有的锁都不放,使双方都无法拿到其锁。就好比二个人都要进入a,b二个屋。一人有a屋的钥匙,一个有b屋的钥匙。如果二个商量好,一个进入a 屋后,把钥匙交给另外一个人,另一个进入b屋后,也把钥匙交给对方。这样就和谐了。不过这是理想情况。现实中很多是互不相让。这就会使二个互相等待。线程的原理类似,因为是cpu是随机选择的,这就很可能使对方线程都是拿不到对方的锁而造成死锁。要写一个死锁程序不一定好使,但程序一旦发生死锁,程序就没什么价值,所以在写程序时一定要避免死锁。尽量避免线程访问共享资源。不要使锁嵌使用。
|