线程阻塞
任何时候线程必须停下来等待它没有的资源时,这个时候线程就会发生阻塞。
要让网络程序中的线程自己放弃cpu控制权,最常见的方式就是对io阻塞。
由于cpu比网络和磁盘快得多,网络程序经常会在等待数据从网络到达或向网络发送数据时发生阻塞现象。即使只阻塞几毫秒,这一点时间也足够其他线程用来完成一些重要的任务。
线程在进入一个同步(synchronized)的方法或代码块时也会阻塞。㘝这个线程没有所同步对象的锁,而其他线程同步拥有这个锁,这个线程就会暂停,知道锁被释放为止,如果这个锁永远不释放,那么这个线程就会永远的停止,也就是发生了死锁。
无论是io阻塞还是锁阻塞,都不会释放线程已经拥有的锁。对于io阻塞,这不是个大问题,因为无非有两种情况:最后io终将不再阻塞或者将抛出一个ioexception异常,然后线程退出这个同步块或方法,并释放他的锁。不过,如果一个线程由于没得到一个锁而阻塞,将永远不会放弃自己已经拥有的锁,则有可能导致死锁线程。