gpt4 book ai didi

java - ScheduledExecutorService 的不稳定行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:24:34 25 4
gpt4 key购买 nike

我正在尝试在我正在开发的应用程序上使用 ScheduledExecutorService,但我遇到了不稳定的行为,无法确定是我做错了什么,还是这是某个已知问题。我已经尝试过文档中的示例:

class BeeperControl {

private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);



public void beepForAnHour() {

final Runnable beeper = new Runnable() {

public void run() {

System.out.println("beep");

}

};

final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(

beeper, 10, 10, TimeUnit.SECONDS);

scheduler.schedule(new Runnable() {

public void run() {

beeperHandle.cancel(true);

}

}, 60 * 60, TimeUnit.SECONDS);

}



public static void main(String[] args) {

new BeeperControl().beepForAnHour();

}

但这只在 10 分钟内打印了 4 次值“哔”,而它本应每 10 秒打印一次。有人可以帮我吗?

亲切的问候,

卡洛斯·费雷拉

编辑:

我在打印指令中添加了更多信息,并在两台不同的机器上运行代码,一台使用 Windows XP,另一台使用 Unix,看看结果:

UNIX

在 2011 年 10 月 17 日星期一 13:31:34 WEST 发出哔哔声

在 2011 年 10 月 17 日星期一 13:31:44 WEST 发出哔哔声

在 2011 年 10 月 17 日星期一 13:31:54 WEST 发出哔哔声

在 2011 年 10 月 17 日星期一 13:32:04 WEST 发出哔哔声

在 2011 年 10 月 17 日星期一 13:32:14 WEST 发出哔哔声

在 2011 年 10 月 17 日星期一 13:32:24 WEST 发出哔哔声

在 2011 年 10 月 17 日星期一 13:32:34 WEST 发出哔哔声

Windows XP

在 2011 年 10 月 17 日星期一 13:24:21 BST 发出哔哔声

在 2011 年 10 月 17 日星期一 13:25:54 BST 发出哔哔声

在 2011 年 10 月 17 日星期一 13:27:08 BST 发出哔哔声

在 2011 年 10 月 17 日星期一 13:28:03 BST 发出哔哔声

在 2011 年 10 月 17 日星期一 13:28:48 BST 发出哔哔声

在 2011 年 10 月 17 日星期一 13:29:40 BST 发出哔哔声

在 2011 年 10 月 17 日星期一 13:30:31 BST 发出哔哔声

最佳答案

This article是理解问题的良好起点。基本上,Windows 定时器有问题。 jdk ScheduledExecutorService 实现利用了 java 中基于“纳米时间”的 API,这是有问题的。我们必须更改我们的代码,以便它在 Windows 上使用 java.util.Timer(它使用基于毫秒的 API,并且似乎在 Windows 上可靠地工作)和在其他任何地方使用 ScheduledExecutorService。

关于java - ScheduledExecutorService 的不稳定行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7793428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com