gpt4 book ai didi

java - 延迟新线程上的方法

转载 作者:行者123 更新时间:2023-12-01 19:32:24 24 4
gpt4 key购买 nike

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

代码

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

我注意到,鄙视这一点,methodB 总是在 methodA 之前运行。

最佳答案

如果想在线程之间同步处理,可以使用 wait()/notify() ,但如果您不确定这些“处理”发生的顺序,我建议您使用 Semaphore相反:

Semaphore sem = new Semaphore(0); // Initialize an empty Semaphore
new Thread(() -> { // This is thread A processing, that should run first
methodA(); // Run processing
sem.release(); // Indicate processing is finished
}).start();

new Thread(() -> { // This is thread B processing, that should run after methodA() has completed
sem.acquire(); // Blocks until release() is called by thread A
methodB(); // Run processing
}).start();
<小时/>

原始答案:

你写道:

executor.schedule(() -> highs(), 100, TimeUnit.MILLISECONDS);

100 毫秒后 highs() 将启动。

new Thread(() -> highs()).start();

另一个highs()现在开始。

new Thread(() -> deleteRecords()).start();

deleteRecords()立即开始

因此 highs() 将运行两次:一次使用 new Thread(() -> highs()).start() ,然后使用 executor.schedule().

只需注释掉new Thread(() -> highs()).start(),第一个执行器调度就会按您的预期触发。

请注意,线程执行不一定按照调用的顺序发生,但通常是这样。

关于java - 延迟新线程上的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59232622/

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