我有几个 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/