Java面试问题之四十五
请问Java中都提供了哪些控制线程的方法?
答:Thread类中提供了以下几个控制线程的方法:
(1)start()方法,这个方法用于启动线程。
(2)suspend()方法,使线程暂停方法。
(3)resume()方法,使暂停的线程恢复运行的方法。
(4)stop()方法,终止线程的方法。
但是,从JDK 1.2开始,除了start()方法以外,其他3个线程的方法都被抛弃了(Deprecated)。可以使用编程手段控制线程的暂停和结束。
知识扩展:
为什么JDK的后续版本要抛弃suspend()、resume()和stop()方法呢?究其原因,主要有:
(1)使用suspend()和resume()方法容易导致以下两个风险:
第一,容易造成死锁问题。
第二,一个线程强制中断另一个线程的运行,会造成另一个线程操作的数据停留在逻辑
上不合逻辑的状态。下面的代码就会引起死锁问题。
public class MachineSuspendResume extends Thread { private int a; public void run() { for(int i=0;i<1000;i++){ synchronized(this){ a+=i; yield(); a-=i; } } } public synchronized void reset() { a=0; } public static void main(String[] args) throws InterruptedException { MachineSuspendResume machine = new MachineSuspendResume(); machine.start(); yield(); machine.suspend(); machine.reset(); machine.resume(); }}