1.停止线程方法
interrupt()、 stop()、interrupt()、return();
2.为何用interrupt 而不用stop,
因stop方法直接强行停止过于暴力,直接停止,当前线程不会执行完毕,后续清理过程不到位,且对锁定的数据进行解锁,导致数据得不到同步处理,使得数据不一致,容易出错。
而在使用interrupt方法后,不会终止一个正在运行的线程,还需加入判断才会完成线程的最终停止;
3.线程是否终止的判断
1)this.interrupted():测试当前线程是否中断,执行后将状态标志清除为false;
2)this.isInterrupted: 测试线程是否已经中断,执行后不清除状态标志。
4.interrupt()方法的使用
1).异常法
在用this.interrupted()方法判断已经是停止状态后;throw new InterruptedException(),抛出异常,然后在try{}catch{}进行停止线程后的操作;
2).interrupt()搭配return;
在用this.interrupted()方法判断已经是停止状态后使用return使线程停止,但仍推荐异常法,因return不会抛出错误,使得不清楚是什么时候线程终止的,终止后的线程也无法进行一个更合理的处理
5.暂停线程
1).suspend()方法暂停线程;resume()方法继续开始线程
缺点:独占、不同步;两个方法使用不当,容易造成公共的同步对象的独占,使得其他线程无法访问公共的同步对象;
独占:如在循环调用println打印时候进行suspend方法停止,后面的所有println打印都将无法进行,因println是一个同步方法,而suspend将其暂停了
不同步:容易出现因线程暂停导致的数据不同步,如赋值中途使用了suspend暂停,而此时又有用户在调用该数据,而调用后,该线程有resume()开始运行,最后所调用到的数据就会出现严重不一致。
2.暂停、停止线程
最新推荐文章于 2024-07-14 07:20:57 发布