相当于 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 的阻塞 的相关文章

  • java.lang.NoClassDefFoundError:org.apache.batik.dom.svg.SVGDOMImplementation

    我在链接到我的 Android LibGDX 项目的 Apache Batik 库时遇到了奇怪的问题 但让我们从头开始 在 IntelliJ Idea 中我有一个项目 其中包含三个模块 Main Android 和 Desktop 我强调的
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的

随机推荐

  • 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