java终止线程的通用机制

      

 线程的终止其实很简单,只要在实现Runnable的类中添加cancel()方法和cancel标记。如:
       private static volatile boolean canceled = false;
       public static void cancel(){ canceled = true;}
       注意,这里是volatile标记的static布尔值,因为这是接下来的方法中都会用到的,而且其值的变化会对它们产生影响,所以是static。volatile就像之前说过的,标记这个布尔值为共享的,使得接下来的与其有直接或者间接的synchronized方法都能看到它的变化,然后就是设置一个方法cancel(),基本上这个方法都是使canceled的值为true,如:
       public static void cancel(){ canceled = true;}
       然后在run()方法中都会针对canceled的值的情况作出相应的处理,一般都会有提示该线程停止的输出提示。
       其实上面的,都只是该停止线程的提示而已,并没有真正意义上的终止线程的作用,只不过当我们调用cancel()方法是为了告诉用户,我这里就要终止线程了,并且要终止那个线程,能够终止线程的,还是Executor类的shutdown()这个方法。
       这里有个疑问,就是有shutdown()和shutdownNow(),它们有什么区别呢?照我的理解,就是线程的关闭并不是马上的,而调用shutdownNow()可以马上关闭,那么到底该选哪个呢?我觉得,这只是性能上的小小优化而已,不必过于在意,而且有时候马上关闭线程还会影响其他线程。
原文地址:https://www.cnblogs.com/wenjiang/p/2660547.html