作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有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/
我是一名优秀的程序员,十分优秀!