Thread类提供了一个stop方法,可是这个方法已经过时了,jdk官方也推荐不使用。原因是stop方法是通过抛出一个ThreadDeath的Error来让线程直接停止的,如果是在同步代码块中,它会释放锁。
stop方法停止线程就像按开关键来关机一样,它是没有进行一些善后的处理的。
下面就通过一个例子来演示一下stop方法会释放锁。
public class TestThreadStop { public static void main(String[] args) throws InterruptedException { final String lock=""; Thread thread=new Thread("t0"){ @Override public void run(){ synchronized (lock){ try{ System.out.println(Thread.currentThread().getName()+"start"); Thread.sleep(10000); System.out.println(Thread.currentThread().getName()+"end"); }catch (Exception e){ e.printStackTrace(); } } } }; thread.start(); Thread.sleep(1000); new Thread("t1"){ @Override public void run(){ synchronized (lock){ try{ System.out.println(Thread.currentThread().getName()+"start"); System.out.println(Thread.currentThread().getName()+"end"); }catch (Exception e){ e.printStackTrace(); } } } }.start(); thread.stop(); System.out.println("main"); } }
最后结果是
t0start
main
t1start
t1end
从结果就可以看出,t0.stop后t1已经获取到锁了