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

停止线程:官方版本

“你好,阿米戈!你必须承认,艾莉的 Cancel(取消)想法很棒。”

“是的。”

“实际上,Thread 类中存在一些类似的功能。只是变量不叫 isCancel。而被称为 isInterrupt。并且,用于停止线程的方法不是 cancel(),而是 interrupt()。”

“真的吗?”

“是的。我们来看一下:”

代码说明
class Clock implements Runnable
{
public void run()
{
Thread current = Thread.currentThread();while (!current.isInterrupted())
{
Thread.sleep(1000);
System.out.println("Tick");
}
}
}
由于多个线程可以在同一 Clock 对象上调用 run 方法,因此我们为当前线程获取 Thread 对象。

只要当前线程的 isInterrupt变量为 false,Clock 类会每隔一秒向控制台写入一次词语“嘀嘀”。

当 isInterrupt变为 true时,run 方法终止。

public static void main(String[] args)
{
Clock clock = new Clock(); Thread clockThread = new Thread(clock); clockThread.start();Thread.sleep(10000);
clockThread.interrupt();
}
主线程启动应始终运行的子线程 (clock)。

等待 10 秒,然后通过调用 interrupt方法取消任务。

主线程完成工作。

clock 线程结束工作。

而且,人们特别喜欢在 run 方法的无限循环中使用的 sleep 方法会自动检查 isInterrupt 变量。如果一个线程调用 sleep 方法,它将首先为该线程检查 isInterrupt 是否为 true。如果为 true,则方法不会进入休眠状态。相反,它会抛出一个 InterruptedException 异常。

“为什么会抛出异常?直接在循环中使用 isInterrupted() 而不是 isCancel() 会不会更好?”

首先run 方法并不总是包含循环。该方法可能只包含对其他方法的几十个调用。然后,你将必须在每个方法调用之前添加 isInterrupted 检查。”

其次,某个包含许多不同操作的方法可能需要很长时间才能执行完。”

第三,抛出异常不会替代 isInterrupted 检查。这只是一个方便的附加功能。抛出的异常允许你快速将调用堆栈回退到 run 方法本身。”

第四,sleep 方法的使用非常频繁。事实证明,这个有用的方法通过同样有用的隐式检查得到了增强。就像无人明确添加检查,但它确实存在。当你使用别人的代码而自己无法添加检查时,这是非常有用的。”

第五,附加检查不会降低性能。调用 sleep 方法意味着线程不会做任何事情(除了休眠),因此额外的工作不会困扰任何人。”

“那会引发激烈的争论。”

最后一点是:你的 run 方法可以调用别人的代码 — 你无权访问的代码(源代码和/或更改代码的权限)。它可能没有 isInterrupted 检查,并且可能使用‘try ... catch (Exception e)’来捕获所有异常。”

没有人可以保证线程将被停止。线程只能自行停止

http://www.dtcms.com/a/503997.html

相关文章:

  • 最好的响应式网站电子外贸网站建设
  • 有效市场假说
  • 网站图片用什么软件做网站框架
  • 农业服务网站建设方案免费的资料网站
  • 4-SpringCloud-Resilience4J服务熔断与降级
  • 网站可以叫做系统吗建站广告
  • 网站搭建说明哪家公司的网好
  • Java基础语法—分支结构
  • 郑州网站制作设计营销行网站建设
  • LeetCode 1170.比较字符串最小字母出现频次
  • 自己做的网站如何管理平台公司的定义
  • 北京网站维护浩森宇特福州网站建设案例
  • FFmpeg 基本API avcodec_open2函数内部调用流程分析
  • a5站长网平面广告怎么设计
  • cnzz网站建设桐乡市建设局官方网站
  • 关于网站建设 策划文案大连市建设工程老网站
  • 2510C++,api设计原则,不除零
  • 设计师网站欣赏网站开发在线培训
  • 【Java 开发日记】我们来说一说 Redisson 的原理
  • uncertainty propagation 基于距离和基于位置的替代方法 是什么
  • 高速公路建设网站苏州聚尚网络科技有限公司
  • 宁夏网站seo国家信用信息企业公示系统
  • Linux系统调用中的dup和dup2函数详解
  • 【Svelte】+layout.ts 会执行几次?
  • 大良营销网站建设行情沧州住房和城乡建设部网站
  • 美橙建站五站合一软件网站备案主体空壳
  • 建筑工程施工企业项目管理软件推荐及深度分析
  • 音乐分享网站开发合肥网站建设新浪营销
  • 安卓从网站获取视频怎么做个人营销网站
  • 3.3循环语句