IllegalThreadStateException异常在多线程操作中常常看到,怎样去避免它呢?
比如我们需要开启一个线程去搜索WIFI热点
比如需要开启一个线程去扫描文件
比如需要开启一个线程去请求下载资源等等
这些线程run方法中都有可能出现异常,并且会在我们不知道的地方结束了run方法。当我们start一个线程的时候,当这个线程的run方法执行完成后,这个线程就会被java虚拟机自动结束以及清理它所占的资源,如果一个线程run方法体还没有执行完,并且没有退出,在这个时间段里,如果再去调用它的start方法的话,就会报IllegalThreadStateException异常,这是java线程的生命周期所规定的。
所以,避免IllegalThreadStateException异常发生的方法就是不要打断它的run。一般而言,会开多个相同的线程去完成相似的操作,而不是等待run方法的结束。这句话的含义就是,当我们需要多次重复地调用一个线程去实现相似的功能的话,我们最好把这个线程定义成一个类! 而不是类中的一个对象! 一个线程对象只能被start一次。如果是一个类的话,我们可以利用这个类去初始化多个线程,我只管开线程即可,至于什么时候线程结束,那是run方法中的事情了。 每一个我们开启的线程它自己都会结束,我们只需要捕捉run中返回的数据即可。
我的解法类似于如下
class MyThread extends Thead{
run(){.......}
}
当我需要扫描wifi热点的时候,那么就
MyThread thread = new MyThread();
thread.start();
总之,一个线程对象一旦调用了start方法,就不能在start它了! 不然会有错。