当前位置: 首页 > 知识库问答 >
问题:

在Java使用民调不好吗?

莫誉
2023-03-14

我有几个arraylist作为数据队列工作。每个队列都链接到一个单独的线程,该线程检查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)并每100ms检查一次来解决这个问题,但响应时间也会变慢。

问题是--我需要增加睡眠,还是我不应该担心这些?

对更安全/更好的系统检查数组中的新数据有何建议?

共有1个答案

蔚宏大
2023-03-14

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

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

既然您似乎需要一个队列,那么为什么不使用一个,比如ArrayBlockingQueue。它有一个take方法,该方法将在不消耗CPU周期的情况下阻塞,直到将项添加到队列中为止。它是线程安全的。

 类似资料:
  • 问题内容: 我们最近对生产系统的观察告诉我们Java容器的常驻内存使用量正在增长。关于此问题,我们已经进行了一些调查,以了解为什么Java进程使用诸如pmap之类的本地工具比堆+线程堆栈+共享对象+代码缓存+等消耗更多的内存。结果,我们发现本机进程(可能是malloc / mmap)分配了一些64M内存块(成对): 我将0000000720000000 3670016K的行解释为我们使用JVM参数

  • 问题内容: 在回答了有关如何使用强制释放Java中的对象(那个家伙正在清除1.5GB的HashMap)的问题后,有人告诉我手动调用是一种不好的做法,但是注释并不完全令人信服。此外,似乎没有人敢于赞成,也没有反对我的答案。 有人告诉我这是一种不好的做法,但是后来我又被告知,垃圾收集器的运行不再系统地停止世界,而且它也可以有效地被JVM用作提示,所以我有点不知所措。 我确实知道,JVM在需要回收内存时

  • 问题内容: 我想知道使用语句退出循环而不是满足循环条件是否是“坏习惯” ? 我对Java和JVM的了解不足,无法知道如何处理循环,因此我想知道我是否通过这样做忽略了一些关键的事情。 这个问题的重点:是否有特定的性能开销? 问题答案: 好主啊 有时,可能会在满足整体要求的循环中发生某些事情,而不满足逻辑循环条件。在这种情况下,用于阻止您毫无意义地循环。 例 在此示例中更有意义的是。每次找到后都继续循

  • 问题内容: 我是python的新手,正尝试从java调用python的函数。 我的主要要求是: 调用应该是透明的,从某种意义上说,它不应仅需要修改文件就可以从Java对其进行调用。我可能会得到任何带有某些功能的python文件。我应该能够调用任何这些功能,而无需修改文件。 我希望能够同时发送原语类型(的参数,,等等)或非原语类型(,从Java)来Python函数和接收返回所返回的对象(其原始类型或

  • 在本章中,我们将研究如何在Drupal中创建Poll module 。 此模块可帮助您为您的网站创建民意调查。 您可以提出问题,提供任意数量的答案,您的访问者也可以投票。 以下是创建Poll Module的步骤。 Step 1 - 单击菜单栏中的“ Module ”。 Step 2 - 启用“ Poll module ,然后单击“ Save Configuration 。 Step 3 - 单击“

  • 问题内容: 我知道关键字存在于Java中。但是我不记得看到使用它的代码。可能我正在使用异常,并在本可以使用的地方登录。在Java中使用关键字是否是一种好习惯? 编辑 :我知道断言通常是一个好习惯。我的问题是,更准确地说,如果在Java中断言的BKM是使用关键字而不是使用异常,日志记录和其他技术。 问题答案: 不使用断言的主要原因是因为默认情况下未启用断言。因此,如果您的条件足够重要而需要断言,则不