什么是线程的阻塞问题?如何解决?

阻塞是用来形容多线程的问题,几个线程之间共享临界区资源,那么当一个线程占用了临界区 资源后,所有需要使用该资源的线程都需要进入该临界区等待,等待会导致线程挂起,一直不 能工作,这种情况就是阻塞,如果某一线程一直都不释放资源,将会导致其他所有等待在这个 临界区的线程都不能工作。当我们使用synchronized或重入锁时,我们得到的就是阻塞线 程,如论是synchronized或者重入锁,都会在试图执行代码前,得到临界区的锁,如果得不 到锁,线程将会被挂起等待,知道其他线程执行完成并释放锁且拿到锁为止。

解决方法: 可以通过减少锁持有时间,读写锁分离,减小锁的粒度,锁分离,锁粗化等方式来优化锁的性 能。