java - 线程、定时器、等等来递增变量

标签 java android multithreading timer

我看过很多关于使用 Runnable、TaskTimers、Timers、Threads 等的帖子,但它们看起来都一样。所以这是一个由两部分组成的问题:

  1. 如果我想每 x 秒将变量增加 n 一次,我想使用哪个? (我需要程序的其余部分不间断地运行!)

  2. 我为什么要使用它?

最佳答案

ScheduledExecutorService executor = Executors.newScheduledThreadPool(1, new ThreadFactory() {
  public Thread newThread(Runnable r) {
    final Thread result = new Thread(r);
    result.setPriority(Thread.MAX_PRIORITY);
    return result;
  }
});

executor.scheduleAtFixedRate(new TotallyImportantTask(), 0, 10, TimeUnit.SECONDS);

计时器将不起作用,因为您无法设置实际的线程优先级,因此它可能会也可能不会运行,具体取决于实际负载。

线程不会工作,因为你需要在循环中调用Thread.sleep(x),并且不能保证它会在x秒后真正醒来。根据操作系统和情况,时间可能会略有不同或有很大差异。

ScheduledExecutorService 实际上使用操作系统调度服务(如果有),并保证在正确的时刻以高优先级启动线程,因此所有其他线程(如果需要)将被搁置。

关于java - 线程、定时器、等等来递增变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302472/

相关文章:

android - Jetpack 撰写 : LazyColumn align each item separately

java - ejabberd 和 smack 握手失败

Java JVM 分析,线程状态 - "Monitor"状态是什么意思?

c++ - 我可以在 VS2010 中获取 VS2012 标准库吗

javascript - 我可以在单独的线程中运行 UIWebView 吗?

Java 简单 WGS84 Lat Lon 到像素 X、Y

java - 无法使用 Java 中的 ProcessBuilder 运行 exe 文件

java - 如何更改另一个 java 类中的变量值?

java - 如何从 Java 应用程序内部检查 grpc 服务器准备情况

android - 在运行时传递参数时使用 getopt(s) 运行脚本的特定部分