1.Thread.stop();使用该方法停止线程是线程不安全的,会释放被锁的对象,导致对象的值错误。该方法不建议使用。会自动抛出ThreadDeath异常。
2.使用interrupt()方法,该方法只是给线程标记一个停止的状态,并不会真正的停止线程。需要配合this.interrupted()方法判断该线程是否是标记了停止状态,并且得到值后会把线程的状态改为false;
例如:
class T1 extends Thread{ @Override public void run(){ super.run(); try { for (int i =0;i<500000;i++) { if (i== 100) this.interrupt(); if (this.isInterrupted()) { System.out.println("线程已停止"); throw new InterruptedException(); } System.out.println("i="+(i+1)); } System.out.println("我在for循环下面"); }catch (InterruptedException ex){ System.out.println("进入cache啊"); ex.printStackTrace(); } } }3.也可以interrupt()配合return停止线程
class T1 extends Thread{ @Override public void run(){ super.run(); for (int i =0;i<500000;i++) { if (i== 100) this.interrupt(); if (this.isInterrupted()) { System.out.println("线程已停止"); return; } System.out.println("i="+(i+1)); } System.out.println("我在for循环下面"); } }