多线程通信的时候很容易造成死锁,死锁无法解决只能避免:
当A线程等待由B线程持有的锁,而B线程正在等待A线程持有的锁时,发生死锁现象,JVM不检测也不避免这种情况,所以程序员必须保证不导致死锁。
避免死锁法则:当多个线程都要访问共享的资源A,B,C时,保证每一个线程都按照相同的顺序去访问他们,比如都先访问A,接着访问B,最后C。
哲学家就餐的故事
Thread类中过时的方法:
supend():使正在运行的线程放弃CPU,暂停运行。
resume():是暂停的线程恢复运行
注意:上述是因为容易导致死锁,所以已经被废弃了。
死锁的情况:
A线程获得对象锁,正在执行一个同步方法,如果B线程调用A线程的suspend方法,此时A线程暂停运行,此时A线程放弃CPU,但是不会放弃占用锁。