gpt4 book ai didi

java - 在 Java 中使用轮询不好吗?

转载 作者:IT老高 更新时间:2023-10-28 21:02:31 25 4
gpt4 key购买 nike

我有几个 ArrayLists 作为数据队列工作。每个队列都链接到一个单独的 thread,该线程检查该 ArrayList 中是否有一些数据。

 while (array.size == 0) {
// nothing
}

// do stuff with one element of the array
// remove element from array
// and call the loop again

我在嵌入式系统编程中做过类似的事情,但是在 Java 中使用它是否安全?问题在于通过非常快速地围绕该 while 循环进行迭代来浪费进程功率。

可以通过添加 Thread.sleep(100) 并每 100 毫秒检查一次来解决,但又一次 - 响应时间变慢。

问题是 - 我需要添加 sleep 还是我不应该担心这个?

关于更安全/更好的系统检查数组中的新数据有什么建议吗?

最佳答案

ArrayList 不是线程安全的集合,因此如果一个线程将数据添加到您的列表中,而另一个线程尝试从同一个列表中检索数据,您无法保证另一个线程会看到添加的元素。

像你描述的那样忙着等待会不必要地消耗cpu资源。

既然您似乎需要一个队列,为什么不使用一个,例如 ArrayBlockingQueue .它有一个 take method这将阻塞,而不消耗 CPU 周期,直到一个项目被添加到队列中。而且它是线程安全的。

关于java - 在 Java 中使用轮询不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12159564/

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