gpt4 book ai didi

java - 如何确保Java在某些代码块中不会切换线程?

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

我有 6 个线程访问一个公共(public)队列容器,它们在 run() 方法中包含以下内容:

if (queue.size() != 0) {
Element e = queue.remove();
//code

它几乎每次都能按预期工作,但是,偶尔线程会在 if check 和 remove() 方法之间切换,因此其他线程获取该元素,而该线程获取 NoSuchElementException。我如何确保这两行代码之间的线程不会切换?

最佳答案

两个主要选项是:

  • 使两个语句原子化,例如使用同步 block
  • 使用并发集合。

就您而言,您可以使用 a BlockingQueue其中有几种方法可以解决您的问题(请参阅 javadoc 中的表)。根据您提供的信息,BlockinQueue::take 似乎是一个不错的候选者。

关于java - 如何确保Java在某些代码块中不会切换线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45487720/

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