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

自适应自助建站网站做seo的公司

自适应自助建站网站,做seo的公司,垫江集团网站建设,做网站郑州汉狮背景 题主在写代码的是否,使用sleep()方法,方法抛出了这个异常,为了如何妥善处理这个异常,有了下面的总结。 在了解InterruptedException异常之前应该了解以下的几个关于线程的一些基础知识。而且得知道什么时候会抛InterruptedE…

背景
题主在写代码的是否,使用sleep()方法,方法抛出了这个异常,为了如何妥善处理这个异常,有了下面的总结。

在了解InterruptedException异常之前应该了解以下的几个关于线程的一些基础知识。而且得知道什么时候会抛InterruptedException异常(当阻塞方法收到中断请求的时候就会抛出InterruptedException异常)

1 什么是中断

线程中断(Thread Interruption)是 Java 中一种协调多线程应用中线程间通信和协作的机制。中断是一个线程通过【标记】来通知另一个线程,它应该停止当前在做的事情并尽快退出。线程中断机制提供了一种优雅和建议的方式来停止或通知线程。被通知的线程在适当的时候自我检查,决定是否终止、暂停或者进行其他处理。

工作原理和方法

线程通过设置一个内部的中断标志位来表示它是否已经被通知中断,默认为false,表示未被中断。当一个线程A调用了线程B的interrupt()方法时,那么线程B的是否请求的中断标志变为true,而线程B可以调用方法检测到此标志的变化。相关的方法有

t.interrupt()发出中断信号给线程t,设置t的中断标志为true。启动中断不会强行停止线程,而是通知线程应该停止执行,这种通知其实只是更改了线程的标志位而已,具体是否停止线程是由具体的逻辑决定的。
t.isInterrupted()检查线程t是否有中断状态,但不清除中断标志,就是不会修改重点标识。
Thread.interrupted()静态方法,返回并重置当前线程的中断状态,设置中断状态为true。用于线程操作检查和重置状态。

本质上,上面的方法就是在查看和更改标识位的值。

2 什么是中断异常 InterruptedException

【阻塞方法】收到中断请求的时候抛出的异常就是中断异常InterruptedException

为了理解阻塞方法要先说下面几个概念:

2.1线程的状态

线程在一定的条件下会发生状态的改变,下面是线程的一些状态

  • 初始(NEW):新建一个线程的对象,还未调用start方法
  • 运行(RUNNABLE):java线程中将已经准备就绪(Ready)和正在运行中(Running)的两种状态都统称为“Runnable”。准备就绪的线程会被放在线程池中等待被调用
  • 阻塞(BLOCKED):是因为各种原因进入了无法获取锁,无法获取CPU的使用权,暂时的停止了运行。直到线程获取锁,才会进入准备就绪(Ready)状态才会有机会转到运行状态
  • 等待(WAITING):该状态的线程需要等待其他线程做出一些特定的动作(通知或者是中断)
  • 超时等待(TIME_WAITING):该状态和上面的等待不同,他可以在指定的时间内自行返回
  • 终止(TERMINATED):线程任务执行完毕

2.2 线程阻塞

线程阻塞通常是指一个线程在执行过程中暂停,以等待某个条件的触发。而什么情况才会使得线程进入阻塞的状态呢?

  • 等待阻塞:运行的线程执行wait()方法,该线程会释放占用的所有资源,JVM会把该线程放入“等待池”中。进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒
  • 同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入“锁池”中
  • 其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态

2.3阻塞方法

阻塞方法:就是会抛出InterruptedException异常的方法。

如果线程B调用了阻塞方法+中断标志变为了true,那么它会抛出InterruptedException异常。抛出异常的同时它会将线程B的是否请求中断标志置为false。

抛InterruptedException的代表方法有:sleep(),wait(),join()。

这三个方法在执行过程中会不断轮询中断状态,如果中断=true,从而自己抛出InterruptEdException。

2.4代码示例

package com.autonavi.cloudmap.xd.biz.impl;/*** @program: Test* @description:**/
public class InterrupTest implements Runnable{public void run(){try {while (true) {Boolean a = Thread.currentThread().isInterrupted();System.out.println("in run() - about to sleep for 20 seconds -" + a);Thread.sleep(20000);System.out.println("in run() - woke up");}} catch (InterruptedException e) {System.out.println("1"+Thread.currentThread().isInterrupted());Thread.currentThread().interrupt();System.out.println("2"+Thread.currentThread().isInterrupted());Boolean c=Thread.interrupted();System.out.println("c="+c);System.out.println("3"+Thread.currentThread().isInterrupted());Boolean d=Thread.interrupted();System.out.println("d="+d);System.out.println("4"+Thread.currentThread().isInterrupted());}}public static void main(String[] args) {InterrupTest si = new InterrupTest();Thread t = new Thread(si);t.start();//主线程休眠2秒,从而确保刚才启动的线程有机会执行一段时间try {Thread.sleep(2000);}catch(InterruptedException e){e.printStackTrace();}System.out.println("in main() - interrupting other thread");//中断线程tt.interrupt();System.out.println("in main() - leaving");}
}

返回结果:
 

in run() - about to sleep for 20 seconds-------false
in main() - interrupting other thread
in main() - leaving
1false
2true
c=true
3false
d=false
4falseProcess finished with exit code 0


 

3 对InterruptedException异常的处理

在实际处理中,sleep(),wait(),join()本身会抛出InterruptedException,对这个异常的处理本质是对中断状态的处理。

1、没有基于中断信息的逻辑处理

如果是在单线程或多线程没有对中断进行通讯和控制的相关内容,打日志或者对线程中断状态进行具体的控制其实没什么区别,因为并不关心这个中断状态的信息有什么用。这里推荐的方式是,catch后,恢复中断状态为true,以防未来这个中断信息有需要的时候。

2、有基于中断信息的逻辑处理

在具体需要根据线程的中断状态进行控制的情况下,就可以按照逻辑需要,通过Thread.interrupted();将中断状态改为自己需要的值。在后续具体的逻辑里进行程序的处理和终止等操作。

不推荐catch后向上抛出,虽然可以转换为RuntimeException抛出,但是有几个不好的点:首先这样中断了线程的执行。如果目标就是中断线程,应该利用中断信息位做更优雅的操作;其次,抛出RuntimeException也屏蔽了具体的中断细节,在多层调用结构里,会造成难以定位问题的问题。

4、代码示例

1. 检查中断标志位时结束运行

线程可以在适当的地方检查自己的中断状态,并在检测到中断时自行退出。常用的方法是 Thread.currentThread().isInterrupted()

public class InterruptExample {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(() -> {while (!Thread.currentThread().isInterrupted()) {System.out.println("Thread is running...");// 执行一些任务try {Thread.sleep(1000); // sleep 会响应中断并抛出异常} catch (InterruptedException e) {System.out.println("Thread is interrupted during sleep.");Thread.currentThread().interrupt(); // 恢复中断状态以便进一步检查}}System.out.println("Thread is exiting...");});thread.start();Thread.sleep(3000); // 让线程运行一段时间thread.interrupt(); // 发送中断信号}
}

明确的任务中断检查和资源清理

复杂任务中必须在多个地方进行中断检查,并进行必要的资源清理。

public class ComplexTaskExample {public static void main(String[] args) {Thread thread = new Thread(new ComplexTask());thread.start();try {Thread.sleep(3000); // 主线程休眠3秒thread.interrupt(); // 中断任务线程} catch (InterruptedException e) {e.printStackTrace();}}
}class ComplexTask implements Runnable {@Overridepublic void run() {try {performTask1();performTask2();performTask3();} catch (InterruptedException e) {System.out.println("Task was interrupted.");// 执行必要的清理资源cleanUp();}System.out.println("Task exiting...");}private void performTask1() throws InterruptedException {System.out.println("Performing Task 1");// 处理过程,如果中断if (Thread.currentThread().isInterrupted()) {throw new InterruptedException();}}private void performTask2() throws InterruptedException {System.out.println("Performing Task 2");// 模拟阻塞Thread.sleep(2000);}private void performTask3() throws InterruptedException {System.out.println("Performing Task 3");// 处理过程,如果中断if (Thread.currentThread().isInterrupted()) {throw new InterruptedException();}}private void cleanUp() {System.out.println("Cleaning up resources...");}
}

参考链接:
Java线程状态分析/线程状态转换图_jdk 线程状态图-CSDN博客必须要掌握的 InterruptedException 异常处理-腾讯云开发者社区-腾讯云

InterruptedException异常处理方式-CSDN博客

http://www.dtcms.com/wzjs/369961.html

相关文章:

  • 个人网站制作基本步骤输入关键词进行搜索
  • 中小企业网站建设 网络营销网站建设情况
  • 西安市免费做网站提高工作效率8个方法
  • 做网站的后台开发需要会些什么淘宝怎么做引流和推广
  • 临沂教育平台网站建设搜索引擎营销简称为
  • 个人怎么做影视网站最近三天的新闻大事摘抄
  • 广告接单平台app铜陵seo
  • 京东网的公司全称是南宁网站seo
  • 网站 备案地优化seo公司哪家好
  • java网站开发的底层语言是福建seo优化
  • 做外贸生意上哪个网站google推广seo
  • 搭建网站的主要风险网站推广公司大家好
  • 免费公司介绍网站怎么做河南郑州最新事件
  • 珠海网站制作报价seo兼职接单平台
  • 网站建设的方案计划seo关键词排名优化销售
  • 凡科做的网站打不开百度一下生活更好
  • 网站基础建设网络营销网站推广
  • 四川省城乡住房建设部网站首页免费发布活动的平台
  • 做企业营销网站google海外推广
  • 外贸网站制作广州推广网站最有效办法
  • 什么网站可以做兼职设计企业内训
  • 湖南网站seo地址福州seo招聘
  • 宁波市铁路建设指挥部网站网络优化app
  • 用html做登录网站网络搜索引擎优化
  • 邵阳疫情最新消息情况seo优化工具大全
  • WordPress手机主题冲突津seo快速排名
  • 网站模板 div百度指数官网数据
  • 太原百度网站快速排名关键词权重如何打造
  • 深圳做针织衫服装的网站网络优化工程师证书
  • 宁津华企动力做网站的电话多少推广app赚钱