Java线程 — 线程的通信 — 多线程通信的死锁问题

多线程通信的时候很容易造成死锁,死锁无法解决只能避免:

当A线程等待由B线程持有的锁,而B线程正在等待A线程持有的锁时,发生死锁现象,JVM不检测也不避免这种情况,所以程序员必须保证不导致死锁。

避免死锁法则:当多个线程都要访问共享的资源A,B,C时,保证每一个线程都按照相同的顺序去访问他们,比如都先访问A,接着访问B,最后C。

 

哲学家就餐的故事

 

Thread类中过时的方法:

supend():使正在运行的线程放弃CPU,暂停运行。

resume():是暂停的线程恢复运行

注意:上述是因为容易导致死锁,所以已经被废弃了。

死锁的情况:

A线程获得对象锁,正在执行一个同步方法,如果B线程调用A线程的suspend方法,此时A线程暂停运行,此时A线程放弃CPU,但是不会放弃占用锁。

posted @ 2017-03-12 10:55  wenxudong  阅读(212)  评论(0编辑  收藏  举报