文章目录
终止线程4种方式
1.正常结束
2.使用volatile退出标志退出
1 | public class ThreadSafe extends Thread { |
使用了一个 Java 关键字 volatile,这个关键字的目的是使 exit 同步,也就是说在同一时刻只能由一个线程来修改 exit 的值。
3.interrupt方式结束
线程处于阻塞,catch interruptException然后break跳出
使用了 sleep,同步锁的 wait,socket 中的 receiver,accept 等方法时,会使线程处于阻塞状态。
先捕获 InterruptedException 异常
之后通过 break 来跳出循环,才能正
常结束 run 方法
线程未处于阻塞,用isInterrupted()来跳出循环
1 | public class ThreadSafe extends Thread { |
4.stop方法终止(线程不安全,像关机,释放锁,其他线程用脏数据)
是 stop 方法是很危险的,就象突然关闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,不安全主要是:
thread.stop()调用之后,创建子线程的线程就会抛出 ThreadDeatherror 的错误,并且会释放子线程所持有的所有锁。
一般任何进行加锁的代码块,都是为了保护数据的一致性,如果在调用thread.stop()后导致了该线程所持有的所有锁的突然释放(不可控制),
那么被保护数据就有可能呈现不一致性,其他线程在使用这些被破坏的数据时,有可能导致一些很奇怪的应用程序错误。