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

中企动力做网站5个月了目前做响应式网站最好的cms

中企动力做网站5个月了,目前做响应式网站最好的cms,重庆最新新闻事件今天,手机app网站java中的线程中断 1、线程中断 即 线程的取消/关闭的机制2、线程对中断interrupt()的反应2.1、RUNNABLE:线程在运行或具备运行条件只是在等待操作系统调度2.2、WAITING/TIMED_WAITING:线程在等待某个条件或超时2.3、BLOCKED:线程在等待锁&…

java中的线程中断

  • 1、线程中断 即 线程的取消/关闭的机制
  • 2、线程对中断interrupt()的反应
    • 2.1、RUNNABLE:线程在运行或具备运行条件只是在等待操作系统调度
    • 2.2、WAITING/TIMED_WAITING:线程在等待某个条件或超时
    • 2.3、BLOCKED:线程在等待锁,试图进入同步块
    • 2.4、NEW/TERMINATED:线程还未启动或已结束
    • 2.5、IO操作
  • 3、关于中断的经验

1、线程中断 即 线程的取消/关闭的机制

Java中停止一个线程的主要机制是中断,中断并不是强迫终止一个线程,它是一种 协作机制 ,是给线程传递一个取消/关闭信号,由线程自身来决定如何以及何时退出。

停止线程,但这个方法被标记为了过时。
@Deprecated
public final void stop()
=========================
返回对应线程的中断标志位是否为truepublic boolean isInterrupted()
返回当前线程的中断标志位是否为true,并清空中断标志位。
public static boolean interrupted()
表示中断对应的线程。
public void interrupt()

2、线程对中断interrupt()的反应

2.1、RUNNABLE:线程在运行或具备运行条件只是在等待操作系统调度

举个栗子:

public static void main(String[] args) throws InterruptedException {Thread t = new Thread(() -> {while (!Thread.currentThread().isInterrupted()) {System.out.println("线程t 执行中...");}});t.start();Thread.sleep(1);t.interrupt();System.out.println("main exit");
}

RUNNABLE状态的线程tinterrupt()后,是否终止中断线程由线程t自身代码逻辑决定。

2.2、WAITING/TIMED_WAITING:线程在等待某个条件或超时

线程执行如下方法会进入WAITING状态:
public final void join() throws InterruptedException
public final void wait() throws InterruptedException线程执行如下方法会进入TIMED_WAITING状态:
public final native void wait(long timeout) throws InterruptedException
public static native void sleep(long millis) throws InterruptedException
public final synchronized void join(long millis) throws InterruptedException

举个栗子:

public class ThreadInterrupt {public static void main(String[] args) {Thread t = new Thread(() -> {try {Thread.sleep(10000);} catch (InterruptedException e) {System.out.println("Thread.interrupted() = " + Thread.interrupted());//Thread.interrupted() = falseSystem.out.println("Thread.interrupted() = " + Thread.interrupted());//Thread.interrupted() = false}});t.start();t.interrupt();}
}

捕获到InterruptedException,通常表示希望结束该线程,线程大概有两种处理方式:
向上传递该异常,这使得该方法也变成了一个可中断的方法,需要调用者进行处理。

有些情况,不能向上传递异常,比如Thread的run方法,它的声明是固定的,不能抛出任何受检异常,这时,应该捕获异常,进行合适的清理操作,清理后,一般应该调用Thread的interrupt方法设置中断标志位,使得其他代码有办法知道它发生了中断。

2.3、BLOCKED:线程在等待锁,试图进入同步块

举个栗子:

public class ThreadInterrupt {private final static Object lockObj = new Object();private static class MyBlockedThread extends Thread {@Overridepublic void run() {System.out.println("MyBlockedThread.run = " + Thread.currentThread().isInterrupted());synchronized (lockObj) {while (!Thread.currentThread().isInterrupted()) {System.out.println(Thread.currentThread().isInterrupted());}}System.out.println("exit");}}public static void main(String[] args) throws InterruptedException {synchronized (lockObj) {MyBlockedThread myBlockedThread = new MyBlockedThread();myBlockedThread.start();Thread.sleep(3000);myBlockedThread.interrupt();myBlockedThread.join(); // join方法会等待线程执行完后返回}}
}

myBlockedThread.join();该行代码放开注释掉情况下:线程一直等待锁 BLOCKED。

com.michael.ThreadInterrupt.MyBlockedThread.run = false

myBlockedThread.join();该行代码注释掉情况下:因为主线程不再等待线程myBlockedThread结束,释放锁lock后,线程myBlockedThread会获得锁,然后检测到发生了中断,然后程序退出。

com.michael.ThreadInterrupt.MyBlockedThread.run = false
exit

2.4、NEW/TERMINATED:线程还未启动或已结束

举个栗子:

public static void main(String[] args) throws InterruptedException {Thread t = new Thread(() -> {System.out.println("线程t 执行...");});t.interrupt();System.out.println("NEW = " + t.isInterrupted());t.start();Thread.sleep(100);t.interrupt();System.out.println("TERMINATE = " + t.isInterrupted());
}============ 执行结果 ============
NEW = false
线程t 执行...
TERMINATE = false

2.5、IO操作

如果线程在等待IO操作,尤其是网络IO,则会有一些特殊的处理。

  • 如果IO通道是可中断的,即实现了InterruptibleChannel接口,则线程的中断标志位会被设置,同时线程会收到异常ClosedByInterruptException
  • 如果线程阻塞于Selector调用,则线程的中断标志位会被设置,同时阻塞的调用会立即返回。
  • InputStream的read调用,该操作是不可中断的,如果流中没有数据,read会阻塞 (但线程状态依然是RUNNABLE),且不响应interrupt(),与synchronized类似,调用interrupt()只会设置线程的中断标志,而不会真正"中断"。

3、关于中断的经验

Java中取消/关闭线程技术是中断,但它是一种协作机制,不会强制终止线程。线程在不同状态IO操作时对中断的反应有所不同。
作为线程的实现者:应该提供明确的取消/关闭方法,并用文档描述清楚其行为。
作为线程的调用者:应该使用其取消/关闭方法,而不是贸然调用interrupt()方法。

http://www.yayakq.cn/news/974439/

相关文章:

  • wordpress网站域名服务器江苏建设网证书查询
  • 江门提供网站制作平台苏州企业网站建设公司只选亿企邦
  • 怎么在濮阳网站做宣传湖南营销型网站建设公司排名
  • 网站 宣传方案网站信息化建设存在的困难
  • 郑州网站制路由器安装wordpress
  • 河北网站优化公司杭州房产网签流程
  • 网站建设需要注意的关键细节wordpress网站专题
  • 做网站的环境配置快速网站建设哪家好
  • 肇庆企业做网站大连旅游必去景点
  • 抖音小程序暴利玩法网站做seo需要些什么
  • 哪里找专业做网站的人网站建设的规划和流程
  • 网站做哪块简单怎么注册wordpress账号
  • 甘肃建设监理协会网站企业年金可以取出来吗
  • 杭州微网站开发公司最新黑帽seo培训
  • 营销策略的概念优化推广服务
  • 能不能用自己的主机做网站天猫店铺购买
  • 中原区网站建设国外的自建网站怎么做
  • 网站备案信息查询系统常州知名网站公司
  • 做一个网站怎么做网站备案核实单
  • 网站后台口令最新网站建设常见问题
  • 为什么做的网站别的浏览器打不开怎么回事网络营销外包团队
  • 那个网站可以做空比特币怎样进入电商平台
  • 兰州北京网站建设高端网站设计 公司新鸿儒
  • 导航站 wordpresswordpress中文版
  • php网站作业比较好的网络优化公司
  • 网站优化关键词怎么做拼多多标题优化软件
  • 英国做电商网站深圳公共资源交易网招标公告
  • 青岛地产网站建设免费建网页软件
  • 网站开发的论文引言旅游网站开发项目策划书
  • 中国银行官网登录入口网站seo模块