线程阻塞
所有消耗时间的运行过程,就被称为线程阻塞。
线程阻塞又程耗时操作。
包括:
用户输入、文件读取、文件上传、加载和上传等。
为什么会出现线程阻塞:
1、等待状态被唤醒:当等待状态被唤醒时,如果该时刻队列中仍然在执行某具有锁的线程,则无法执行被唤醒的线程。
为防止出现线程死锁的状态,我们通常会采用某线程在使用时另一线程休眠的方式,我们通过wait()方法来将线程休眠,休眠后进入等待状态,当我们使用notify()方法唤醒后,队列被占用,此时由于被唤醒的线程排在后面,所以无法执行,导致线程阻塞。
2、睡眠状态:当一个线程执行代码的时候调用了sleep方法后,线程处于睡眠状态,此时有其他线程需要执行时就会造成线程阻塞。
sleep方法被调用后,线程不会释放锁,所以依旧占用队列,无法执行其他线程。
3、线程在输入:当输入时,线程会暂停,等待用户通过控制界面输入后才可继续执行,所以当线程需输入时,不得不被阻塞。
4、礼让状态:当一个线程正在运行时,调用了yield方法之后,该线程会将执行权礼让给同等级的线程或者比它高一级的线程优先执行,此时该线程有可能只执行了一部分而此时把执行权礼让给了其他线程,这个时候也会进入阻塞状态。