Java ScheduledExecutorService BAD 精度

2023-11-27

您好,我编写了一个简单的程序来测试 ScheduledExecutorService.schedule() 函数的精度。

该测试设置延迟并检查有效等待时间。

该测试在运行 Linux 3.8 x86_64 的 i7 机器上执行,同时安装 OpenJDK 1.7 和 Oracle JDK 1.7

测试结果非常糟糕,这里有一个列表向您显示假定延迟和有效延迟之间的平均增量:


Legend:

  • 睡眠(毫秒):所需的延迟(以毫秒为单位)
  • 平均增量(毫秒):所需延迟和获得的有效延迟之间的平均差异(以毫秒为单位)
  • deltaAVG_PERC:所需/有效的错误百分比
  • 增量最小值/最大值:所需延迟和获得的有效延迟之间的最小/最大差异

Sleep(ms): 0.010 deltaAVG(ms): 0.029 deltaAVG_PERC: 0289.6 % delta MIN/MAX (ms): 0.029/0.029
Sleep(ms): 0.020 deltaAVG(ms): 0.061 deltaAVG_PERC: 0299.3 % delta MIN/MAX (ms): 0.006/4.578
Sleep(ms): 0.030 deltaAVG(ms): 0.066 deltaAVG_PERC: 0221.1 % delta MIN/MAX (ms): 0.009/1.639
Sleep(ms): 0.040 deltaAVG(ms): 0.066 deltaAVG_PERC: 0165.3 % delta MIN/MAX (ms): 0.010/0.445
Sleep(ms): 0.050 deltaAVG(ms): 0.069 deltaAVG_PERC: 0138.0 % delta MIN/MAX (ms): 0.006/0.370
Sleep(ms): 0.060 deltaAVG(ms): 0.067 deltaAVG_PERC: 0111.8 % delta MIN/MAX (ms): 0.052/0.700
Sleep(ms): 0.070 deltaAVG(ms): 0.067 deltaAVG_PERC: 0096.0 % delta MIN/MAX (ms): 0.053/5.597
Sleep(ms): 0.080 deltaAVG(ms): 0.067 deltaAVG_PERC: 0083.6 % delta MIN/MAX (ms): 0.054/1.978
Sleep(ms): 0.090 deltaAVG(ms): 0.065 deltaAVG_PERC: 0072.8 % delta MIN/MAX (ms): 0.034/1.548
Sleep(ms): 0.100 deltaAVG(ms): 0.066 deltaAVG_PERC: 0066.3 % delta MIN/MAX (ms): 0.026/1.969
Sleep(ms): 0.110 deltaAVG(ms): 0.065 deltaAVG_PERC: 0058.7 % delta MIN/MAX (ms): 0.036/1.075
Sleep(ms): 0.120 deltaAVG(ms): 0.064 deltaAVG_PERC: 0053.5 % delta MIN/MAX (ms): 0.012/0.454
Sleep(ms): 0.130 deltaAVG(ms): 0.067 deltaAVG_PERC: 0051.6 % delta MIN/MAX (ms): 0.038/1.523
Sleep(ms): 0.140 deltaAVG(ms): 0.066 deltaAVG_PERC: 0047.0 % delta MIN/MAX (ms): 0.038/0.544
Sleep(ms): 0.150 deltaAVG(ms): 0.066 deltaAVG_PERC: 0044.0 % delta MIN/MAX (ms): 0.031/0.498
Sleep(ms): 0.160 deltaAVG(ms): 0.065 deltaAVG_PERC: 0040.4 % delta MIN/MAX (ms): 0.022/0.432
Sleep(ms): 0.170 deltaAVG(ms): 0.067 deltaAVG_PERC: 0039.6 % delta MIN/MAX (ms): 0.031/0.229
Sleep(ms): 0.180 deltaAVG(ms): 0.071 deltaAVG_PERC: 0039.3 % delta MIN/MAX (ms): 0.046/0.291
Sleep(ms): 0.190 deltaAVG(ms): 0.074 deltaAVG_PERC: 0039.1 % delta MIN/MAX (ms): 0.042/1.069
Sleep(ms): 0.200 deltaAVG(ms): 0.071 deltaAVG_PERC: 0035.5 % delta MIN/MAX (ms): 0.031/0.293
Sleep(ms): 0.210 deltaAVG(ms): 0.072 deltaAVG_PERC: 0034.3 % delta MIN/MAX (ms): 0.028/1.058
Sleep(ms): 0.220 deltaAVG(ms): 0.075 deltaAVG_PERC: 0034.0 % delta MIN/MAX (ms): 0.055/1.879
Sleep(ms): 0.230 deltaAVG(ms): 0.075 deltaAVG_PERC: 0032.5 % delta MIN/MAX (ms): 0.040/0.514
Sleep(ms): 0.240 deltaAVG(ms): 0.075 deltaAVG_PERC: 0031.4 % delta MIN/MAX (ms): 0.055/1.715
Sleep(ms): 0.250 deltaAVG(ms): 0.075 deltaAVG_PERC: 0030.2 % delta MIN/MAX (ms): 0.044/1.025
Sleep(ms): 0.260 deltaAVG(ms): 0.076 deltaAVG_PERC: 0029.2 % delta MIN/MAX (ms): 0.038/1.561
Sleep(ms): 0.270 deltaAVG(ms): 0.076 deltaAVG_PERC: 0028.1 % delta MIN/MAX (ms): 0.050/0.697
Sleep(ms): 0.280 deltaAVG(ms): 0.075 deltaAVG_PERC: 0026.8 % delta MIN/MAX (ms): 0.039/0.996
Sleep(ms): 0.290 deltaAVG(ms): 0.076 deltaAVG_PERC: 0026.3 % delta MIN/MAX (ms): 0.032/0.475
Sleep(ms): 0.300 deltaAVG(ms): 0.077 deltaAVG_PERC: 0025.6 % delta MIN/MAX (ms): 0.055/2.136
Sleep(ms): 0.310 deltaAVG(ms): 0.077 deltaAVG_PERC: 0024.9 % delta MIN/MAX (ms): 0.042/0.373
Sleep(ms): 0.320 deltaAVG(ms): 0.079 deltaAVG_PERC: 0024.6 % delta MIN/MAX (ms): 0.036/2.622
Sleep(ms): 0.330 deltaAVG(ms): 0.080 deltaAVG_PERC: 0024.3 % delta MIN/MAX (ms): 0.038/1.367
Sleep(ms): 0.340 deltaAVG(ms): 0.080 deltaAVG_PERC: 0023.5 % delta MIN/MAX (ms): 0.028/0.308
Sleep(ms): 0.350 deltaAVG(ms): 0.079 deltaAVG_PERC: 0022.7 % delta MIN/MAX (ms): 0.055/1.885
Sleep(ms): 0.360 deltaAVG(ms): 0.076 deltaAVG_PERC: 0021.1 % delta MIN/MAX (ms): 0.053/0.403
Sleep(ms): 0.370 deltaAVG(ms): 0.079 deltaAVG_PERC: 0021.3 % delta MIN/MAX (ms): 0.056/0.390
Sleep(ms): 0.380 deltaAVG(ms): 0.079 deltaAVG_PERC: 0020.9 % delta MIN/MAX (ms): 0.055/3.777
Sleep(ms): 0.390 deltaAVG(ms): 0.081 deltaAVG_PERC: 0020.9 % delta MIN/MAX (ms): 0.058/0.320
Sleep(ms): 0.400 deltaAVG(ms): 0.080 deltaAVG_PERC: 0019.9 % delta MIN/MAX (ms): 0.056/0.203
Sleep(ms): 0.410 deltaAVG(ms): 0.082 deltaAVG_PERC: 0019.9 % delta MIN/MAX (ms): 0.051/0.562
Sleep(ms): 0.420 deltaAVG(ms): 0.082 deltaAVG_PERC: 0019.6 % delta MIN/MAX (ms): 0.056/0.913
Sleep(ms): 0.430 deltaAVG(ms): 0.080 deltaAVG_PERC: 0018.6 % delta MIN/MAX (ms): 0.053/0.938
Sleep(ms): 0.440 deltaAVG(ms): 0.085 deltaAVG_PERC: 0019.4 % delta MIN/MAX (ms): 0.055/0.582
Sleep(ms): 0.450 deltaAVG(ms): 0.086 deltaAVG_PERC: 0019.1 % delta MIN/MAX (ms): 0.041/0.179
Sleep(ms): 0.460 deltaAVG(ms): 0.083 deltaAVG_PERC: 0018.0 % delta MIN/MAX (ms): 0.032/0.235
Sleep(ms): 0.470 deltaAVG(ms): 0.088 deltaAVG_PERC: 0018.6 % delta MIN/MAX (ms): 0.042/0.581
Sleep(ms): 0.480 deltaAVG(ms): 0.088 deltaAVG_PERC: 0018.3 % delta MIN/MAX (ms): 0.040/0.477
Sleep(ms): 0.490 deltaAVG(ms): 0.086 deltaAVG_PERC: 0017.5 % delta MIN/MAX (ms): 0.032/0.931
Sleep(ms): 0.500 deltaAVG(ms): 0.088 deltaAVG_PERC: 0017.5 % delta MIN/MAX (ms): 0.055/0.521
Sleep(ms): 0.510 deltaAVG(ms): 0.081 deltaAVG_PERC: 0016.0 % delta MIN/MAX (ms): 0.056/0.225
Sleep(ms): 0.520 deltaAVG(ms): 0.088 deltaAVG_PERC: 0016.9 % delta MIN/MAX (ms): 0.055/0.344
Sleep(ms): 0.530 deltaAVG(ms): 0.085 deltaAVG_PERC: 0016.0 % delta MIN/MAX (ms): 0.035/0.819
Sleep(ms): 0.540 deltaAVG(ms): 0.084 deltaAVG_PERC: 0015.6 % delta MIN/MAX (ms): 0.026/0.961
Sleep(ms): 0.550 deltaAVG(ms): 0.093 deltaAVG_PERC: 0016.9 % delta MIN/MAX (ms): 0.058/0.570
Sleep(ms): 0.560 deltaAVG(ms): 0.085 deltaAVG_PERC: 0015.3 % delta MIN/MAX (ms): 0.033/0.176
Sleep(ms): 0.570 deltaAVG(ms): 0.090 deltaAVG_PERC: 0015.8 % delta MIN/MAX (ms): 0.043/0.289
Sleep(ms): 0.580 deltaAVG(ms): 0.087 deltaAVG_PERC: 0014.9 % delta MIN/MAX (ms): 0.041/0.258
Sleep(ms): 0.590 deltaAVG(ms): 0.082 deltaAVG_PERC: 0013.9 % delta MIN/MAX (ms): 0.057/0.352
Sleep(ms): 0.600 deltaAVG(ms): 0.083 deltaAVG_PERC: 0013.9 % delta MIN/MAX (ms): 0.060/0.393
Sleep(ms): 0.610 deltaAVG(ms): 0.084 deltaAVG_PERC: 0013.8 % delta MIN/MAX (ms): 0.059/0.177
Sleep(ms): 0.620 deltaAVG(ms): 0.095 deltaAVG_PERC: 0015.3 % delta MIN/MAX (ms): 0.041/0.273
Sleep(ms): 0.630 deltaAVG(ms): 0.080 deltaAVG_PERC: 0012.6 % delta MIN/MAX (ms): 0.059/0.253
Sleep(ms): 0.640 deltaAVG(ms): 0.085 deltaAVG_PERC: 0013.3 % delta MIN/MAX (ms): 0.060/0.422
Sleep(ms): 0.650 deltaAVG(ms): 0.100 deltaAVG_PERC: 0015.4 % delta MIN/MAX (ms): 0.050/0.641
Sleep(ms): 0.660 deltaAVG(ms): 0.090 deltaAVG_PERC: 0013.7 % delta MIN/MAX (ms): 0.058/0.170
Sleep(ms): 0.670 deltaAVG(ms): 0.097 deltaAVG_PERC: 0014.5 % delta MIN/MAX (ms): 0.055/0.578
Sleep(ms): 0.680 deltaAVG(ms): 0.094 deltaAVG_PERC: 0013.8 % delta MIN/MAX (ms): 0.060/3.560
Sleep(ms): 0.690 deltaAVG(ms): 0.092 deltaAVG_PERC: 0013.3 % delta MIN/MAX (ms): 0.059/0.178
Sleep(ms): 0.700 deltaAVG(ms): 0.094 deltaAVG_PERC: 0013.4 % delta MIN/MAX (ms): 0.060/0.202
Sleep(ms): 0.710 deltaAVG(ms): 0.102 deltaAVG_PERC: 0014.3 % delta MIN/MAX (ms): 0.056/0.227
Sleep(ms): 0.720 deltaAVG(ms): 0.084 deltaAVG_PERC: 0011.7 % delta MIN/MAX (ms): 0.060/0.177
Sleep(ms): 0.730 deltaAVG(ms): 0.099 deltaAVG_PERC: 0013.5 % delta MIN/MAX (ms): 0.046/0.723
Sleep(ms): 0.740 deltaAVG(ms): 0.098 deltaAVG_PERC: 0013.2 % delta MIN/MAX (ms): 0.058/0.203
Sleep(ms): 0.750 deltaAVG(ms): 0.104 deltaAVG_PERC: 0013.9 % delta MIN/MAX (ms): 0.059/0.274
Sleep(ms): 0.760 deltaAVG(ms): 0.105 deltaAVG_PERC: 0013.8 % delta MIN/MAX (ms): 0.056/0.274
Sleep(ms): 0.770 deltaAVG(ms): 0.104 deltaAVG_PERC: 0013.5 % delta MIN/MAX (ms): 0.056/0.631
Sleep(ms): 0.780 deltaAVG(ms): 0.099 deltaAVG_PERC: 0012.7 % delta MIN/MAX (ms): 0.044/0.191
Sleep(ms): 0.790 deltaAVG(ms): 0.099 deltaAVG_PERC: 0012.5 % delta MIN/MAX (ms): 0.041/0.167
Sleep(ms): 0.800 deltaAVG(ms): 0.104 deltaAVG_PERC: 0013.0 % delta MIN/MAX (ms): 0.044/0.223
Sleep(ms): 0.810 deltaAVG(ms): 0.095 deltaAVG_PERC: 0011.7 % delta MIN/MAX (ms): 0.060/0.761
Sleep(ms): 0.820 deltaAVG(ms): 0.101 deltaAVG_PERC: 0012.3 % delta MIN/MAX (ms): 0.058/0.231
Sleep(ms): 0.830 deltaAVG(ms): 0.102 deltaAVG_PERC: 0012.3 % delta MIN/MAX (ms): 0.060/0.552
Sleep(ms): 0.840 deltaAVG(ms): 0.106 deltaAVG_PERC: 0012.6 % delta MIN/MAX (ms): 0.060/0.517
Sleep(ms): 0.850 deltaAVG(ms): 0.109 deltaAVG_PERC: 0012.9 % delta MIN/MAX (ms): 0.061/0.204
Sleep(ms): 0.860 deltaAVG(ms): 0.107 deltaAVG_PERC: 0012.5 % delta MIN/MAX (ms): 0.062/0.532
Sleep(ms): 0.870 deltaAVG(ms): 0.109 deltaAVG_PERC: 0012.5 % delta MIN/MAX (ms): 0.061/0.266
Sleep(ms): 0.880 deltaAVG(ms): 0.108 deltaAVG_PERC: 0012.3 % delta MIN/MAX (ms): 0.057/0.753
Sleep(ms): 0.890 deltaAVG(ms): 0.108 deltaAVG_PERC: 0012.2 % delta MIN/MAX (ms): 0.060/0.553
Sleep(ms): 0.900 deltaAVG(ms): 0.108 deltaAVG_PERC: 0011.9 % delta MIN/MAX (ms): 0.056/0.369
Sleep(ms): 0.910 deltaAVG(ms): 0.106 deltaAVG_PERC: 0011.6 % delta MIN/MAX (ms): 0.057/0.213
Sleep(ms): 0.920 deltaAVG(ms): 0.107 deltaAVG_PERC: 0011.6 % delta MIN/MAX (ms): 0.057/0.185
Sleep(ms): 0.930 deltaAVG(ms): 0.107 deltaAVG_PERC: 0011.5 % delta MIN/MAX (ms): 0.044/0.842
Sleep(ms): 0.940 deltaAVG(ms): 0.111 deltaAVG_PERC: 0011.8 % delta MIN/MAX (ms): 0.064/0.395
Sleep(ms): 0.950 deltaAVG(ms): 0.108 deltaAVG_PERC: 0011.4 % delta MIN/MAX (ms): 0.061/0.207
Sleep(ms): 0.960 deltaAVG(ms): 0.110 deltaAVG_PERC: 0011.5 % delta MIN/MAX (ms): 0.042/0.215
Sleep(ms): 0.970 deltaAVG(ms): 0.107 deltaAVG_PERC: 0011.0 % delta MIN/MAX (ms): 0.049/0.646
Sleep(ms): 0.980 deltaAVG(ms): 0.110 deltaAVG_PERC: 0011.2 % delta MIN/MAX (ms): 0.059/0.317
Sleep(ms): 0.990 deltaAVG(ms): 0.109 deltaAVG_PERC: 0011.0 % delta MIN/MAX (ms): 0.061/0.205
Sleep(ms): 1.000 deltaAVG(ms): 0.103 deltaAVG_PERC: 0010.3 % delta MIN/MAX (ms): 0.052/0.283
Sleep(ms): 1.010 deltaAVG(ms): 0.109 deltaAVG_PERC: 0010.8 % delta MIN/MAX (ms): 0.058/0.295
Sleep(ms): 1.020 deltaAVG(ms): 0.107 deltaAVG_PERC: 0010.5 % delta MIN/MAX (ms): 0.063/0.562
Sleep(ms): 1.030 deltaAVG(ms): 0.105 deltaAVG_PERC: 0010.2 % delta MIN/MAX (ms): 0.060/0.256
Sleep(ms): 1.040 deltaAVG(ms): 0.110 deltaAVG_PERC: 0010.6 % delta MIN/MAX (ms): 0.059/0.231
Sleep(ms): 1.050 deltaAVG(ms): 0.110 deltaAVG_PERC: 0010.5 % delta MIN/MAX (ms): 0.059/0.570
Sleep(ms): 1.060 deltaAVG(ms): 0.109 deltaAVG_PERC: 0010.2 % delta MIN/MAX (ms): 0.059/0.210
Sleep(ms): 1.070 deltaAVG(ms): 0.110 deltaAVG_PERC: 0010.3 % delta MIN/MAX (ms): 0.035/0.460
Sleep(ms): 1.080 deltaAVG(ms): 0.110 deltaAVG_PERC: 0010.2 % delta MIN/MAX (ms): 0.062/0.189
Sleep(ms): 1.090 deltaAVG(ms): 0.110 deltaAVG_PERC: 0010.1 % delta MIN/MAX (ms): 0.058/0.228
Sleep(ms): 1.100 deltaAVG(ms): 0.111 deltaAVG_PERC: 0010.0 % delta MIN/MAX (ms): 0.061/0.513
Sleep(ms): 1.110 deltaAVG(ms): 0.110 deltaAVG_PERC: 0009.9 % delta MIN/MAX (ms): 0.052/0.200
Sleep(ms): 1.120 deltaAVG(ms): 0.110 deltaAVG_PERC: 0009.9 % delta MIN/MAX (ms): 0.048/0.248
Sleep(ms): 1.130 deltaAVG(ms): 0.108 deltaAVG_PERC: 0009.6 % delta MIN/MAX (ms): 0.061/0.570
Sleep(ms): 1.140 deltaAVG(ms): 0.111 deltaAVG_PERC: 0009.7 % delta MIN/MAX (ms): 0.065/0.184
Sleep(ms): 1.150 deltaAVG(ms): 0.112 deltaAVG_PERC: 0009.7 % delta MIN/MAX (ms): 0.063/0.449
Sleep(ms): 1.160 deltaAVG(ms): 0.109 deltaAVG_PERC: 0009.4 % delta MIN/MAX (ms): 0.049/0.298
Sleep(ms): 1.170 deltaAVG(ms): 0.107 deltaAVG_PERC: 0009.1 % delta MIN/MAX (ms): 0.059/0.212
Sleep(ms): 1.180 deltaAVG(ms): 0.107 deltaAVG_PERC: 0009.1 % delta MIN/MAX (ms): 0.060/0.224
Sleep(ms): 1.190 deltaAVG(ms): 0.114 deltaAVG_PERC: 0009.6 % delta MIN/MAX (ms): 0.061/0.217
Sleep(ms): 1.200 deltaAVG(ms): 0.109 deltaAVG_PERC: 0009.1 % delta MIN/MAX (ms): 0.058/0.231
Sleep(ms): 1.210 deltaAVG(ms): 0.115 deltaAVG_PERC: 0009.5 % delta MIN/MAX (ms): 0.061/0.237
Sleep(ms): 1.220 deltaAVG(ms): 0.108 deltaAVG_PERC: 0008.8 % delta MIN/MAX (ms): 0.063/0.207
Sleep(ms): 1.230 deltaAVG(ms): 0.107 deltaAVG_PERC: 0008.7 % delta MIN/MAX (ms): 0.059/0.355
Sleep(ms): 1.240 deltaAVG(ms): 0.113 deltaAVG_PERC: 0009.1 % delta MIN/MAX (ms): 0.059/0.197
Sleep(ms): 1.250 deltaAVG(ms): 0.114 deltaAVG_PERC: 0009.1 % delta MIN/MAX (ms): 0.059/0.235
Sleep(ms): 1.260 deltaAVG(ms): 0.113 deltaAVG_PERC: 0009.0 % delta MIN/MAX (ms): 0.061/0.219
Sleep(ms): 1.270 deltaAVG(ms): 0.113 deltaAVG_PERC: 0008.9 % delta MIN/MAX (ms): 0.060/0.284
Sleep(ms): 1.280 deltaAVG(ms): 0.112 deltaAVG_PERC: 0008.8 % delta MIN/MAX (ms): 0.060/0.222
Sleep(ms): 1.290 deltaAVG(ms): 0.114 deltaAVG_PERC: 0008.9 % delta MIN/MAX (ms): 0.063/0.182
Sleep(ms): 1.300 deltaAVG(ms): 0.112 deltaAVG_PERC: 0008.6 % delta MIN/MAX (ms): 0.058/0.209

正如您所看到的,称为 deltaAVG 的平均误差相对于延迟而言正在增加。

怎样才能在拖延的情况下得到更好的结果呢?我的意思是 i7 机器上 10 微秒的 300% 错误率太多了。

这是我用于测试的代码:

package threadexecutor_perftest;

import java.text.DecimalFormat;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import statistica.timedValuesAverage;

public class ThreadExecutor_PerfTest implements Runnable, ThreadFactory {

    private final ScheduledExecutorService executor;
    private long start;
    private long stop;
    private long delay_nano = 10000;
    private final int averageTimeLen_ms = 2000;
    private TimedValuesAverage<Double> deltaAVG = new TimedValuesAverage<>(averageTimeLen_ms);
    private final DecimalFormat int3 = new DecimalFormat("0.000");
    private final DecimalFormat int4 = new DecimalFormat("0000.0");


    public static void main(String[] args) {
        ThreadExecutor_PerfTest test = new ThreadExecutor_PerfTest();

        test.start();

    }

    public ThreadExecutor_PerfTest() {
        executor = Executors.newSingleThreadScheduledExecutor(this);

    }

    public boolean start() {
        executor.schedule(this, 0L, TimeUnit.NANOSECONDS);
        return true;
    }

    private long DBG_lastReport;

    @Override
    public void run() {

        stop = System.nanoTime();

        if (start > 0) {
        
            long deltaT = (stop - start) - delay_nano;
            deltaAVG.put((double) deltaT);

            //report status every averageTimeLen_ms
            if ((System.currentTimeMillis() - DBG_lastReport) > averageTimeLen_ms) {

                System.out.println("    Sleep(ms): " + int3.format(delay_nano / 1000000.0)
                        + " deltaAVG(ms): " + int3.format(deltaAVG.getAverage() / 1000000.0)
                        + " deltaAVG_PERC: " + int4.format((deltaAVG.getAverage() /     delay_nano) * 100)+" %"
                        + " delta MIN/MAX (ms): " +     int3.format(deltaAVG.getSmallestEver() /     1000000.0) + "/" + int3.format(deltaAVG.getGreatestEver() / 1000000.0));

                //increase delay by 10 micro seconds (1000 nano seconds)
                delay_nano += 10000;
                deltaAVG = new TimedValuesAverage<>(averageTimeLen_ms);
                DBG_lastReport = System.currentTimeMillis();
            }
        }

        start = System.nanoTime();
        executor.schedule(this, delay_nano, TimeUnit.NANOSECONDS);
    }

    @Override
    public Thread newThread(Runnable r) {
        Thread t = new Thread(r, "Exec-test");
        t.setPriority(Thread.MAX_PRIORITY);
        return t;
    }

}

无论如何,您的操作系统的调度程序量程可能不会大于 10 毫秒,因此尝试依赖用户空间基于线程的计时器将是徒劳的。看这个答案这基本上是一样的。

在爪哇岛你最好的射击是java.util.concurrent.locks.LockSupportparkNanos()方法。但低于 10 毫秒,您仍然可能会运气不好——因为操作系统而不是 Java。

如果你没读过其他内容,读这个。这个答案是正确的。

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

Java ScheduledExecutorService BAD 精度 的相关文章

  • JAVA 中的 Composer 相当于什么? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我目前从 PHP 转向 java 有没有类似的工具composer https getcomposer org 在 PHP 中用于 JAV
  • 如何在 Android 中的 Chrome 或 Firefox 等特定浏览器的 Web 视图中加载应用程序

    我是 Android 新手 我正在做一个应用程序 我需要在平板电脑上的 Web 视图中加载现有的应用程序 在平板电脑中 当我使用 Web 视图加载应用程序时 我的应用程序将加载到默认浏览器中 如何在平板电脑上的 Web 视图中的特定浏览器
  • Hashset - 创建 Set 后使对象相同

    如果我们在 HashSet 中添加两个不同的对象 可变的 然后通过调用 setter 更改对象的值 使它们相同 则大小仍然是 hashSet 的 2 我无法理解其原因 public static void main String args
  • Java 小程序在 Mac 上闪烁

    这个问题很奇怪 问题并非在每个平台上都会发生 我在使用 MacOSX 的 Google Chrome 中出现了这种情况 但在 Safari 中却没有出现这种情况 对于使用 Windows 的朋友来说 在 Google Chrome 上运行得
  • Selenium 和 TestNG 同时使用“dependsOn”和“priority =”问题

    我正在努力在 GUI 自动化测试中实现更好的工作流程控制 我首先从dependsOn开始 但很快发现缺点是如果一个测试失败 则套件的整个其余部分都不会运行 所以我改用 priority 但看到了意外的行为 一个例子 Test priorit
  • Maven WebApp META-INF context.xml

    我正在使用 Maven 3 并且尝试在 webapp 文件夹下添加 META INF 文件夹 所以我正在尝试执行以下操作 src main webapp META INF context xml WEB INF 下面是我的 POM 文件
  • 使用 Jena 查询维基数据

    目前 Wikidata 有一个 SPARQL 端点 https query wikidata org https query wikidata org 我想使用 Jena 3 0 1 查询此网站 我使用以下代码 但收到错误消息 端点返回的
  • 在拇指上方显示修改后的 JSlider 值

    有没有一种简单的方法可以在使用某些 外观和感觉 的同时更改 JSlider 上方标签中显示的值 为了清楚起见 我正在谈论这个值 具体来说 我想显示除以 1000 的值而不是值本身 我知道如果我显示它们 我可以为刻度设置标签 但用户将不得不猜
  • Java 中如何验证字符串的格式是否正确

    我目前正在用 Java 编写一个验证方法来检查字符串是否是要更改为日期的几种不同格式之一 我希望它接受的格式如下 MM DD YY M DD YY MM D YY 和 M D YY 我正在测试第一种格式 每次它都告诉我它无效 即使我输入了有
  • JERSEY:错误跟踪:java.lang.IllegalStateException:实体输入流已关闭

    我正在使用 Jersey 2 x 以下是我的控制器 GET Path id Produces application json public Response getUser PathParam id int userId Context
  • RxJava android mvp 单元测试 NullPointerException

    我是 mvp 单元测试的新手 我想对演示者进行一个非常基本的测试 它负责登录 我只想断言 view onLoginSuccess 这是演示者代码 public LoginPresenter LoginViewContract loginVi
  • 使用 Guava Ordering 对对象列表进行多条件排序

    我有一个类无法实现可比较 但需要根据 2 个字段进行排序 我怎样才能用番石榴实现这一目标 假设班级是 class X String stringValue java util Date dateValue 我有一个清单 List
  • 接口是否像对象一样对待?

    为什么下面的代码可以工作 interface I class A implements I public String toString return in a class B extends A public String toStrin
  • 从字节数组设置 img src

    我需要设置img src我在对象中拥有的字节数组的属性 img
  • 无法连接到docker中的elasticsearch容器

    我正在尝试使用 docker 的官方 elasticsearch 镜像 我遵循了本指南 https www elastic co guide en elasticsearch reference current docker html但是当
  • Spring - 如何在不匹配列名的情况下使用 BeanPropertyRowMapper

    我正在开发一个应用程序 该应用程序已使用行映射器从纯 JDBC 转换为 Spring 模板 我遇到的问题是数据库中的列与属性名称不匹配 这阻止我使用BeanPropertyRowMapper容易地 我看到一些关于在查询中使用别名的帖子 这会
  • 在java中执行匿名pl/sql块并获取结果集

    我想执行匿名 PL SQL 并需要获取结果集对象 我得到了可以通过在 PL SQL 块内使用游标来完成的代码 但 PL SQL 块本身将以文本形式来自数据库 所以我无法编辑该 PL SQL 块 并且它只会返回两个值 其列名始终相同 它将返回
  • 从 InputStream 中删除换行符

    我喜欢从一个文件中删除所有换行符 对于 n 和 r n java io InputStream 在读取文件时 相应的方法如下所示 param target linkplain File return linkplain InputStrea
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset
  • 我怎样才能限定我不“拥有”的自动装配设置器

    要点是 Spring Batch v2 测试框架具有JobLauncherTestUtils setJob与 Autowired注解 我们的测试套件有多个Job类提供者 由于这个类不是我可以修改的东西 我不确定如何限定它自动连接的作业 每个

随机推荐

  • C# 对 StreamWriter 参数进行单元测试

    我有一堆类 它们都实现了一个接口 其中一个参数是 StreamWriter 我需要检查 StreamWriter 的内容 我试图找到一种方法来避免在测试服务器上写入文本文件并打开它们来检查内容 有没有办法快速将 StreamWriter 内
  • 是否可以与“const fn”的结果匹配?

    我尝试过天真的方法 fn main gt Result lt Box
  • VS 2008 Intellisense 缺失:组合键绑定到当前不可用的命令

    Intellisense 已停止处理我的 aspx 文件 并且我查看了解决该问题的其他问题但没有解决方案 当我尝试格式化 aspx 文档 Ctrl K Ctrl D 时 状态栏显示 组合键已绑定到当前不可用的命令 格式文档 轮廓不再显示 我
  • 如何在保存记录之前清理数据(删除 html 标签)?

    我想知道 Rails3 是否有一种简单的方法可以在将输入数据保存到数据库之前从输入数据中删除 html 标签 现在 数据已由 HAML 在视图级别进行清理 JS 没有被执行之类的东西 但我想完全删除潜在的有害数据 基本上 我的问题是 是否有
  • 是否可以在 Gradle 中定义 Android 字符串数组资源?

    在 Android 版 Gradle 中 我试图生成与此字符串数组资源等效的内容
  • 来自扫描仪的 Java 循环/用户输入

    制作一个简单的篮球程序 我询问主队名称 本赛季有多少场比赛 然后循环询问下一场球队比赛 基本上 当我启动 do while 循环时 它效果很好 除非用户输入例如 俄亥俄州 例如 输出将从 剩余 6 场比赛 变为 剩余 4 场比赛 通常它会问
  • Pandas to_excel-如何让它更快

    我有一个包含 12 000 行和 34 列的数据框 pandas 将其写入 Excel 大约需要 15 秒 我读到了一些关于 to excel 函数的讨论 使其更快的一种方法是添加 engine xlsxwriter 我使用以下代码 wri
  • Facebook 新 iOS7 应用程序中的 UIStatusBar

    我有一个带有侧栏菜单的应用程序 有点像 Facebook 侧栏菜单 我正在使用这个名为SWRevealViewController而且效果很好 现在自从 iOS7 发布以来 我就是不知道如何调整我的状态和导航栏 就像在 Facebook 应
  • jQuery 验证插件条件必填字段

    我有一个问题jQuery 验证插件 我有一套3单选按钮 如果选择前两个中的任何一个 则会在表单上向用户显示额外的选择输入 如果选择第三个 则不会发生任何情况 我希望用户成为required如果他们从单选按钮集中选择选项 1 或 2 则可以从
  • 如何使用 SBT 运行 JUnit 4.11 测试用例?

    我有以下内容构建 sbt libraryDependencies com novocode junit interface 0 10 test libraryDependencies junit junit 4 11 test 我注意到ju
  • 具有缩放属性的 ObjectAnimator 使 bg 变黑?

    我使用 ObjectAnimator 来缩小relativelayout ObjectAnimator scaleDownX ObjectAnimator ofFloat view scaleX 0 5f ObjectAnimator sc
  • 隐藏滚动条并溢出:启用滚动

    我需要隐藏具有 Overflow scroll 的 div 上的滚动条启用后 div 将通过鼠标和键盘滚动 但滚动条本身不会显示 有没有办法用 css 来做到这一点 或者 javascript 是可行的方法 您可以使用纯 CSS 来做到这一
  • android:onClick 不适用于 ProGuard

    从今天开始 我的应用程序发生了一些奇怪的事情 每次我单击设置了 android onClick 属性的按钮时 我都会得到一个IllegalStateException 找不到方法 我注意到只有当我在文件中启用 Proguard 时才会发生这
  • Python pandas 从长转向宽

    我的数据目前采用长格式 下面是一个示例 Stock Date Time Price Year AAA 2001 01 05 15 20 09 2 380 2001 AAA 2002 02 23 10 13 24 2 440 2002 AAA
  • 支持通配符的 Python Windows 文件复制

    我一直在这样做 result subprocess call copy 123 xml out folder y if result 0 do something else do something else 直到今天我开始研究 pywin
  • 如何在 Java 中将数字格式化为固定长度、空格填充、千位分隔符、2 位小数

    如何在Java中将数字格式化为固定长度 在左侧字符串上填充空格 并用空格作为千 位分隔符 保留小数点后两位 假设是 14 个字符的字符串 I e Number 10 03 must be 10 03 and Number 1235353 9
  • R 脚本的 GUI 前端

    我们有一组 R 脚本 它们处理一些数据并产生一些结果 我们希望使这些脚本可供不习惯 R 命令行的基本用户使用 我们希望为他们提供一些漂亮的 GUI 这将允许 轻松从 MS Excel Access 导入 导出数据 如果可能 还支持复制 粘贴
  • 使用资产中的 Uri 或文件创建 MediaPlayer 时出错

    我将song mp3复制到项目的资产目录中并编写了以下代码 private MediaPlayer mp Uri uri Uri parse file android asset song mp3 mp MediaPlayer create
  • 具有应用内区域设置更改的 Android App Bundle

    当我需要从应用程序本身内部更改应用程序区域设置 即在应用程序内部进行语言更改设置 时 我遇到了 AAB 问题 问题是 AAB 只为我提供了我的设备语言资源 例如 我的设备安装了英语和法语 因此 AAb 只为我提供英语和法语的资源 但从应用程
  • Java ScheduledExecutorService BAD 精度

    您好 我编写了一个简单的程序来测试 ScheduledExecutorService schedule 函数的精度 该测试设置延迟并检查有效等待时间 该测试在运行 Linux 3 8 x86 64 的 i7 机器上执行 同时安装 OpenJ