asp网站改成php,西安公司章程在哪里下载,个人可以做电视台网站吗,网站后台如何管理中断机制 文章目录 中断机制1. 概述2. 三大方法3. 中断运行中的线程的方式 1. 概述
首先一个线程不应该由其他线程来强制中断或停止#xff0c;而是应该由线程自己自行停止#xff0c;自己来决定自己的命运。所以Thread.stop,Thread.suspend,Thread.resume 都已经被废弃了
…中断机制 文章目录 中断机制1. 概述2. 三大方法3. 中断运行中的线程的方式 1. 概述
首先一个线程不应该由其他线程来强制中断或停止而是应该由线程自己自行停止自己来决定自己的命运。所以Thread.stop,Thread.suspend,Thread.resume 都已经被废弃了
其次在Java中没有办法立即停止一条线程然而停止线程却显得尤为重要如取消一个耗时操作。因此Java提供了一种用于停止线程的协商机制一一中断也即中断标识协商机制。
中断只是一种协作协商机制Java没有给中断增加任何语法中断的过程完全需要程序员自己实现。若要中断一个线程你需要手动调用该线程的interrupt方法该方法也仅仅是将线程对象的中断标识设成true接着你需要自己写代码不断地检测当前线程的标识位如果为true表示别的线程请求这条线程中断此时究竟该做什么需要你自己写代码实现。
每个线程对象中都有一个中断标识位用于表示线程是否被中断该标识位为true表示中断为false表示未中断:通过调用线程对象的interrupt方法将该线程的标识位设为true; 可以在别的线程中调用也可以在自己的线程中调用。
2. 三大方法
方法内容public void interrupt()实例方法仅仅是设置线程的中断状态为true发起一个协商而不会立即停止线程public static boolean interrupted()判断线程是否被中断并清除当前中断状态会将中断状态置为falsepublic boolean isInterrupted()判断当前线程是否被中断通过检查中断标志位
当对一个线程调用interrupt()时
如果线程处于正常活动状态那么会将该线程的中断标志设置为true仅此而已如果线程处于被阻塞状态(例如处于sleep,wait,join等状态)在别的线程中调用当前线程对象的interrupt方法线程会立即退出被阻塞状态并抛出一个InterruptedException异常
public static boolean interrupted(),底层调用的是isInterrupted(true);//会清除当前中断状态
public boolean isInterrupted()底层调用的是isInterrupted(false);
3. 中断运行中的线程的方式
通过volatile变量实现通过AtomicBoolean实现通过Thread类自带的中断api实例方法实现
实现方式在需要中断的线程中不断监听中断状态一旦发生中断就执行相应的中断处理业务逻辑停止线程
public static volatile boolean flag false;public static void main(String[] args) {new Thread(() - {while (true) {// 不断监听flagif (flag) {System.out.println(结束线程执行: Thread.currentThread().getName());// 一旦发生中断就执行相应的中断处理业务逻辑停止线程break;}System.out.println(线程跑起来);}}).start();try {TimeUnit.SECONDS.sleep(1);} catch (Exception e) {e.printStackTrace();}new Thread(() - {flag true;System.out.println(修改flag完毕);}).start();
}