当前位置: 首页 > news >正文

做平面的公司网站南京seo优化公司

做平面的公司网站,南京seo优化公司,英雄联盟手游小程序被投诉,wordpress怎么添加二级如何中断一个线程? 首先一个线程不应该由其他线程来强制中断或者停止,而是应该由线程自己自行停止。所以我们看到线程的stop()、resume()、suspend()等方法已经被标记为过时了。 其次在java中没有办法立即停止一个线程,然而停止线程显得尤为重…

如何中断一个线程?

        首先一个线程不应该由其他线程来强制中断或者停止,而是应该由线程自己自行停止。所以我们看到线程的stop()、resume()、suspend()等方法已经被标记为过时了。

        其次在java中没有办法立即停止一个线程,然而停止线程显得尤为重要,比如取消一个耗时的操作。因此java提供了一种用于停止线程的协商机制 - 中断,也就是中断标识协商机制。如果你要中断一个线程,你需要手动调用该线程的interrupt方法,改方法仅仅将该线程对象的中断标设置成true,接着程序员需要自己写代码不断的检测当前线程的标识位。

中断线程三个相关方法

interrupt()

        该方法是一个实例方法,仅仅是设置线程的中断标识状态为true,发起一个协商而不会立即停止改线程。

interrupted()

        该方法是一个静态方法,判断线程是否被中断并清除当前线程中断状态。该方法干了两个事情:

  1. 返回当前线程中断状态,测试当前线程是否已经被中断
  2. 将当前线程的中断状态重新设置成false,清除线程的中断状态

isInterrupted()

        该方法是一个实例方法,判断当前线程是否被中断

中断一个线程的正确姿势

volatile关键字修饰的变量

    static volatile boolean volatileStop = false;public static void main(String[] args) {new Thread(() -> {while (true) {if (volatileStop) {System.out.println(Thread.currentThread().getName() + ",跳出当前循环");break;}System.out.println(Thread.currentThread().getName() + ",hell volatile");}}, "A").start();try {TimeUnit.MILLISECONDS.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}new Thread(() -> {volatileStop = true;}, "B").start();}

通过AtomicBoolean

   static AtomicBoolean atomicStop = new AtomicBoolean();public static void main(String[] args) {new Thread(() -> {while (true) {if (atomicStop.get()) {System.out.println(Thread.currentThread().getName() + ",atomicStop被设置成true,跳出当前循环");break;}System.out.println(Thread.currentThread().getName() + ",hell AtomicBoolean");}}, "A").start();try {TimeUnit.MILLISECONDS.sleep(20);} catch (InterruptedException e) {e.printStackTrace();}new Thread(() -> {atomicStop.set(true);}, "B").start();}

通过Thread自带的api:insterrupt()方法和isInterrupted()方法

        在需要中断的线程中不断监听中断状态,一旦发生中断就执行相应的中断处理业务逻辑stop线程。

public static void main(String[] args) {Thread a= new Thread(() -> {while (true) {if (Thread.currentThread().isInterrupted()) {System.out.println(Thread.currentThread().getName() + ",isInterrupted 被设置成true,跳出当前循环");break;}System.out.println(Thread.currentThread().getName() + ",hell interrupt api");}}, "A");a.start();try {TimeUnit.MILLISECONDS.sleep(20);} catch (InterruptedException e) {e.printStackTrace();}new Thread(() -> {a.interrupt();}, "B").start();}

总结

        当对一个线程调用interrupt()方法时:

  1. 如果线程处于正常活动状态,那么会将该线程的中断标志位设置为true,仅此而已。被设置中断标识的线程将继续正常运行,不受影响。所以interrupt()方法并不能真正的中断线程,需要被调用方的线程自己配合好才行。
  2. 如果线程处于被阻塞状态(例如:sleep、wait、join等),在别的线程中调用interrupt方法,那么该线程将立即退出阻塞状态,并抛出一个InterruptedException异常,且会清除线程的中断状态。
  3. 如果线程已经中断、不活动将不会有任何影响。

http://www.hkea.cn/news/126100/

相关文章:

  • 晋中公司做网站seo站长之家
  • 到哪里找人做网站优化seo培训班
  • 深圳网站开发哪家专业搜索到的相关信息
  • 湖北武汉网站制作引擎搜索下载
  • 做网站登录的需求分析seo点击排名工具有用吗
  • 诸暨住房和城乡建设委员会网站怎么制作网站?
  • 昆明cms建站模板视频号排名优化帝搜软件
  • 商务咨询网站源码重庆网站建设哪家好
  • 建设部网站从何时可以查询工程师证深圳全网推广服务
  • 网页制作工具的选择与网站整体风格是有关系的友情链接论坛
  • 免费商会网站模板百度推广账号
  • 玄武模板网站制作品牌关键词排名点击软件网站
  • 网站title的写法微信软文怎么写
  • 设计企业网站流程磁力引擎
  • 橙色企业网站模板域名注册购买
  • 培训建设网站线上推广产品
  • 写作网站不屏蔽全网关键词指数查询
  • wordpress手机uiseo关键词的选择步骤
  • 自己制作网页的步骤windows优化大师在哪里
  • 黑龙江企业信息系统seo推广优化外包公司
  • wordpress+增加域名赣州网站seo
  • 政府门户网站建设思路怎样优化网络
  • 厦门个人网站建设百度账户代运营
  • 企业网站开发注意什么企业网站官网
  • 网站建设开发合同书关键词怎么找出来
  • 常州微信网站建设附子seo
  • 上海网站seo招聘十种营销方式
  • 农产品网络营销模式百度推广怎么优化
  • 公司网站维护如何做分录自己搭建一个网站
  • 做期货浏览哪些网站网络优化工程师前景如何