stop方法有两个作用,一个是线程执行后停止线程,一个是在线程执行之前给线程设置不可运行的状态。
但是经过测试发现,在线程调用start方法之前,执行stop方法设置线程的不可运行状态。仍然有部分线程可以运行。即:不可运行的线程运行了!!!
查看源码发现:start0 和stop0方法的运行顺序,start0方法在前,也就是说,先启动一个线程,然后stop0结束这个线程,即使设置不可启动状态也是这样。这就是罪魁祸首,详细情况见stop和start源码。
所以我们不要使用stop方法做线程状态的设置,而直接条件判断线程是否可用。