所谓线程同步就是在执行多线程任务时,一次只能有一个线程访问共享资源,其他线程只能等待,只有当该线程完成自己的执行后,另外的线程才可以进入,支持这种互斥的机制称为监视器 (Monitor )。在一段时间内只有一个线程拥有监视器,拥有监视器的线程才能访问相应的资源,并锁定资源不让其他线程访问,所有其他的线程在试图访问被锁定的资源时被挂起,等待监视器解锁
多线程在使用互斥机制实现同步时,存在“死锁”的潜在危险。死锁是由于两个或多个线程都无法得到相应的监视器而造成相互等待的现象。
例如,在某一多线程的程序中有两个共享资源A和B,并且每一个线程都需要获得这两个资源后才可以执行,这是一个同步问题,但是如果没有合理地安排获取这些资源的顺序,就有可能出现线程1已经获取资源A的锁,由于某种原因被阻塞,此时线程2启动并获得资源B的锁,再去获得资源A的锁时发现线程1已经获取,因此等待线程1释放A锁。线程1从阻塞中恢复以后继续执行,欲获取资源B的锁,却发现B锁已被线程2获得,因此也陷入等待。在这种情况下,程序已无法向前推进,在没有外力的情况下,也不会自动退出,因而造成了严重的死锁问题 |