相当于 Java 的 Timer 的阻塞

2024-01-21

是否有一个相当于阻塞java.util.Timer班级?我正在寻找将阻止创建计时器的线程的解决方案。

以下代码是非阻塞的"After timer"输出立即打印。

    new Timer().schedule(new TimerTask() {
        @Override
        public void run() {
            System.out.println("Hello");
        }
    }, 1000, 1000);
    System.out.println("After timer");

我想要实现的是"After timer"仅当计时器被取消时(以及之后被取消)才打印消息。


撇开这听起来像是一件奇怪的事情......而且阻塞线程是浪费......

我不知道有哪个标准 Java API 可以做到这一点。

Since Timer不是一个final类,您可以通过覆盖 Schedule 方法来扩展该类以实现阻塞行为,并使用能够(也)解除阻塞任何线程的方法覆盖 cancel 方法。像这样的东西:

    public class MyTimer extends Timer {

        private final Object lock = new Object();
        private boolean canceled = false;

        @Override
        public void schedule(TimerTask task, long delay) {
            synchronize (lock) {
                super.schedule(task, delay);
                while (!cancelled) {
                    lock.wait();
                }
            }
        }

        // and more schedule overrides ...

        @Override
        public void cancel() {
            synchronize (lock) {
                super.cancel();
                canceled = true;
                lock.notifyAll();
            }
        }
    }

请注意,cancel()类似于标准Timer::cancel方法。

  • 计划任务被取消。
  • 如果任务正在执行,则允许其完成。
  • 取消调用不等待任务完成
  • 之后Timer已取消,不再接受任何任务。

最后,请注意

new MyTimer().schedule(new TimerTask() {
    @Override
    public void run() {
        System.out.println("Hello");
    }
}, 1000, 1000);

(使用阻塞调度方法)不可能解除阻塞。这MyTimer实例必须发布到不同的线程,以便该线程可以调用cancel() on it.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

相当于 Java 的 Timer 的阻塞 的相关文章

  • 如何查看Pocketsphinx词典中是否存在该单词?

    我只是想看看字典文件中是否存在字符串 字典文件位于问题底部 我想检查语音识别器是否可以识别单词 例如 识别器将无法识别字符串ahdfojakdlfafiop 因为字典中没有定义 所以 我可以检查某个单词是否在 pocktsphinx 词典中
  • 任务“:app:dexDebug”执行失败

    我目前正在处理我的项目 我决定将我的 Android Studio 更新到新版本 但在我导入项目后 它显示如下错误 Information Gradle tasks app assembleDebug app preBuild UP TO
  • java中的csv到pdf文件

    我正在尝试获得一个csv文件解析为pdf 到目前为止我所拥有的内容附在下面 我的问题是这段代码最终出现在 pdf 中的文件在 csv 文件的第一行被截断 我不明白为什么 附示例 本质上我想要一个没有任何操作的 csv 文件的 pdf 版本
  • Google 地图查询返回的 JSON 包含像 \x26 这样的编码字符(如何解码?)

    在 Java 应用程序中 我获取 JSON 来自 Google 地图 其中包含以下字符 x26我想将其转换为其原始字符 据我所知 这是一个 UTF 8 表示法 但我不完全确定 在源 JSON 中 可能会出现各种编码字符 例如 x3c div
  • 如何在 Eclipse 中用阿拉伯语读写

    我在 eclipse 中编写了这段代码来获取一些阿拉伯语单词 然后打印它们 public class getString public static void main String args throws Exception PrintS
  • 检查双精度值的等于和不等于条件

    我在比较两者时遇到困难double values using and 我创建了 6 个双变量并尝试进行比较If健康 状况 double a b c d e f if a b c d e f My code here in case of t
  • 如何打印整个字符串池?

    我想打印包含文字的整个字符串池String使用添加的对象intern 就在垃圾收集之前 JDK有没有隐式的方法来进行这样的操作 我们如何检查字符串池 EDIT The comment suggests that there may be a
  • 使用 Checkstyle Plugin 时从插件调用代码时出现问题:“org.eclipse.jface”

    我正在尝试在 Rational Software Architect 7 0 0 4 上使用 eclipse cs 插件 我最近卸载了旧的 beta2 版本并安装了 beta3 插件本身按照之前的配置工作 但是每当我尝试通过 Windows
  • PropertySources 中各种源的优先级

    Spring引入了新的注释 PropertySources对于所有标记为的类 Configuration since 4 0 需要不同的 PropertySource作为论证 PropertySources PropertySource c
  • JavaFX - setVisible 隐藏元素但不重新排列相邻节点

    在 JavaFX 中 如果我有一个场景有 2VBox元素和每个VBox有多个Label in it 如果我设置顶部VBox to 无形的 为什么底部VBox 不向上移动顶部的场景VBox was The VBox is 无形的但我希望其他物
  • spring - 强制 @Autowired 字段的 cglib 代理

    我有混合堆栈 EJB 和 Spring 为了将 Spring 自动装配到 EJB 我使用SpringBeanAutowiringInterceptor 不确定这是否会影响我遇到的问题 在尝试通过以下方式自动装配 bean 时 Scope p
  • Java替换特定字符

    这是我在这个网站上的第一个问题 所以我会尽量不要成为一个十足的菜鸟 我目前正在用java 创建刽子手游戏 所以我问你的问题是我们是否被赋予了 幽灵 这个词 并将 Ghost 替换为 hiddenWord ghost length for i
  • 在 AKKA 中,对主管调用 shutdown 是否会停止其监督的所有参与者?

    假设我有一位主管连接了 2 位演员 当我的应用程序关闭时 我想优雅地关闭这些参与者 调用supervisor shutdown 是否会停止所有参与者 还是我仍然需要手动停止我的参与者 gracias 阻止主管 https github co
  • OpenJDK 版本控制

    上下文 我想确保我们系统上安装的 Java 不受 CVE 2022 21449 的影响 java version 给出 openjdk version 11 0 7 2020 04 14 LTS OpenJDK Runtime Enviro
  • 从java中的字符串数组中删除空值

    java中如何从字符串数组中删除空值 String firstArray test1 test2 test4 我需要像这样没有 null 空 值的 firstArray String firstArray test1 test2 test4
  • struts 教程或示例

    我正在尝试在 Struts 中制作一个登录页面 这个想法是验证用户是否存在等 然后如果有错误 则返回到登录页面 错误显示为红色 典型的登录或任何表单页面验证 我想知道是否有人知道 Struts 中的错误管理教程 我正在专门寻找有关的教程 或
  • Java中获取集合的幂集

    的幂集为 1 2 3 is 2 3 2 3 1 2 1 3 1 2 3 1 假设我有一个Set在爪哇中 Set
  • Java 推断泛型类型

    我正在寻找类似的推断捕获泛型类型的概念 类似于以下方法片段 但不是捕获泛型类型的类 public
  • java中如何找到class文件的包

    我正在编写一个使用 class 文件的 java 程序 我希望能够读取文件系统上的 class 文件 使用 InputStream 并确定它所在的包 该 class 文件可能不在一个好的包目录结构中 它可能位于某个随机位置 我怎样才能做到这
  • 使用 eclipse IDE 配置 angularjs

    我想开始使用 AngularJs 和 Java Spring 进行开发 我使用 Eclipse 作为 IDE 我想配置我的 Eclipse 以使这些框架无缝工作 我知道我可能要求太多 但相信我 我已经做了很多研究 你们是我最后的选择 任何帮

随机推荐

  • Plotly 中的 $ 刻度格式化程序尊重负值

    Per the answer https stackoverflow com a 58142945 1840471 to 使用python中的plotly方法在y轴刻度中添加货币符号 https stackoverflow com q 58
  • 根据日期从 git 签出旧提交

    由于与另一个项目 共享此代码 不兼容 我正在尝试从 git 检索旧提交 git 存储库是 OpenZWave 我发现 SO 上有一个帖子说要发出命令 git checkout 14 days ago 但这会导致 warning Log fo
  • 使用 Node jS 的 Redis 配置集

    Team 我正在尝试使用 NODE js 应用程序在运行时设置 redis 的配置 如下所示 让 setConfig 等待 this cacheConnection config set notify keyspace events Ex
  • 获取简单注入器的容器实例

    我正在 ASP NET MVC 项目中使用简单注入器 我添加了SimpleInjector Integration Web Mvcnuget 包 这增加了SimpleInjectorInitializer上课于App Start文件夹并初始
  • 如何禁用特定控件的默认皮肤?

    是否可以有一个不使用 skin 文件中指定的默认外观的控件 我有一个我要做的控件not想要应用默认皮肤 在大多数 ASP NET 书籍中都可以找到此解决方案 使用 EnableTheming
  • 代码隐藏中的 .NET / C# 字符串引用未加载更新值

    我似乎遇到了一个奇怪的问题 即字符串引用没有加载更新的值 简而言之 我替换了一个包含一堆页面标题 例如 HTML 页面标题 的 DLL 文件 App Code dll 但从其他 DLL 引用时 这些值并未更新 以下是示例页面代码隐藏中的代码
  • WPF TreeView,在PreviewMouseDown事件中获取TreeViewItem

    如何确定在 PreviewMouseDown 事件中单击的 TreeViewItem 以下似乎有效 private void myTreeView PreviewMouseDown object sender MouseButtonEven
  • 使用反射输入计算 CRC64 的最有效方法

    我需要使用计算 CRC 64这个设置 https i stack imgur com Tdj7Z png进入这个精彩的网站 http www sunshine2k de coding javascript crc crc js html h
  • MySQL 锁等待超时

    我有错误Lock wait timeout exceeded try restarting transaction 出现这种情况的原因是什么以及如何解决 供参考 innodb lock wait timeout 100在 MySQL 配置文
  • 是否有 FMX 函数可以在运行时设置 TImage 的透明颜色?

    我在 FMX FireMonkey 的表单上有一个 TImage 我想在运行时将位图加载到 TImage 中 其中位图应该具有由位图中第一个像素的颜色定义的透明背景 该颜色可能因位图而异 我知道如何在设计时通过使用 TImage 的 Mul
  • 将变量从伏特发送到自定义函数

    我创建了一个可以从 volt 访问的自定义函数 该函数似乎工作正常 但我无法设法将变量发送到该函数 它将变量作为文本而不是其值发送 树枝功能 volt gt getCompiler gt addFunction getusergroup f
  • 通过WIFI认证后User.Identity.Name为空

    我正在使用 WIFI 登录我的应用程序 一切似乎都很好 日志记录 重定向到网站等 但是当我尝试使用User Identity Name在我的鳕鱼异常被抛出 User为空 有什么想法我做错了吗 我在 VS 2012 上工作 web confi
  • xsl-fo:并行的两份报告,一份在奇数页,另一份在偶数页

    我想生成一个 PDF 其中一个内容流在奇数页 另一个内容流在偶数页 因此当您双面打印 PDF 时 您有一个模板可以在偶数页上写笔记 这是我所拥有的 但它不起作用
  • 使用 Hibernate 管理多租户应用程序中的连接池

    我正在尝试使用单独的架构方法设置多租户应用程序 我正在使用 JPA 和 Hibernate 4 实现 就像 说的ben75 https stackoverflow com users 1818045 ben75在这个非常有用的thread
  • 在 C 中对 int 进行符号扩展

    所以我在获取 int 字段然后对其进行符号扩展时遇到了一些麻烦 我有一个获取 int 字段的方法 getField int value int hi int lo Value 是我从中获取字段的 int hi 和 lo 是字段的大小 所以我
  • 选择所有具有 png 背景图像的 div

    我怎样才能在 jQuery 中选择所有div是有background image url somepath somename png 以他们的风格 尝试添加自定义选择器 document ready function extend expr
  • 如何将 Prop 传递给导航屏幕组件 - React Native

    我对 React Native 还很陌生 我在 App js 文件中创建了一个抽屉导航器 我的导航组件之一是一个名为登录界面 我正在尝试将道具传递给登录界面当用户导航到它时显示 App js 导航器 const Tab createMate
  • 从 .NET 应用程序引用 Google 的 V8 引擎

    我正在构建一个 NET 3 5 应用程序 并且需要在服务器上评估 JS 代码 基本上是用户提供的规则集 可以在浏览器或服务器上工作 托管 JS 不是一个选项 因为 JS 代码将在运行时提供 Aptana 的 Jaxer 也不是一个选择 因此
  • 操作无法完成。不允许操作

    我的 iPhone 应用程序出现了非常奇怪的问题 我们有一个应用程序已获得批准并在应用程序商店销售 它包含下载一些数据库更新的功能 该更新通过 HTTP 以 ZIP 形式提供 问题是我无法保存这个下载的 ZIP 因为我收到 操作无法完成 操
  • 相当于 Java 的 Timer 的阻塞

    是否有一个相当于阻塞java util Timer班级 我正在寻找将阻止创建计时器的线程的解决方案 以下代码是非阻塞的 After timer 输出立即打印 new Timer schedule new TimerTask Override