我有2种方法methodA,methodB。它们在不同的线程上运行。我希望methodB在启动methodA之后以100毫秒的延迟运行,该怎么办?

编码

final ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(3);
executor.schedule(() -> highs(), 100, TimeUnit.MILLISECONDS);
new Thread(() -> highs()).start();
new Thread(() -> deleteRecords()).start();


我注意到,鄙视此方法,方法B始终在方法A之前运行。

最佳答案

通过让ThreadPool立即执行一个线程,然后在一个100ms之后进行调度,您将获得所需的效果(让一个线程运行methodA,然后另一个线程在100毫秒后运行methodB) 。我写了一个小例子来测试:

public class Main {

    public static void main (String[] args) {
        ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(3);
        executor.execute(() -> methodA());
        executor.schedule(() -> methodB(), 100, TimeUnit.MILLISECONDS);
    }

    public static void methodA(){
        System.out.println("A: " + System.currentTimeMillis());
    }

    public static void methodB(){
        System.out.println("B: " + System.currentTimeMillis());
    }
}


该程序产生以下输出:

A: 1575782281388
B: 1575782281492

10-08 02:25