避免Java Thread 重复启动的异常

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它了! 不然会有错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值