JDK1.5以前版本,在Thread类中提供了stop()和destroy()方法,用于线程的停止和销毁。
stop()方法是不安全的,使用这个方法停止线程,可以解锁所有和该线程相关的监视器。那些原来受监视器保护的对象会处于不一致的状态,因此受损对象可能变得对其他线程可见,从而导致任意行为的发生。
destroy()方法的设计初衷是为了销毁线程,该线程所持有的任何监视器仍然保持锁定。但是,该方法从未真正实现。如果目标线程持有保护关键系统资源的锁,当线程被销毁后,则无法再次访问该资源,这将直接导致死锁。
参见3.3.3节,使用状态值结束线程运行。
如何使用shutdown()与shutdownNow()方法关闭线程池中的任务,参见4.1.2节和4.3.2节相关内容。
线程休眠就是使正在执行任务的线程,进入WAITING状态。这时会释放当前线程占用的监视器锁,而且CPU不会再给该任务分配资源。线程的WAITING与BLOCKED状态完全不同,这是一种非常经济的、不占用系统资源的休眠状态。
参见3.1节,通过Object对象的wait()/notify()方法,休眠或唤醒线程。