问题标签 [java.util.concurrent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4155 浏览

java - java HashMap中的ConcurrentModificationException程序

代码:

当我运行此代码时,出现以下异常:

这一行是 CountUpdater.java:58 :

我用谷歌搜索这个程序,我知道我可以使用 aConcurrentHashMap而不是 plain HashMap

但我想知道,为什么我使用:

为 HashMap 创建新实例,仍然抛出ConcurrentModificationException

如何通过不使用来修复它ConcurrentHashMap

感谢帮助 :)

0 投票
3 回答
28232 浏览

java - BlockingQueue的实现:SynchronousQueue和LinkedBlockingQueue有什么区别

我看到了BlockingQueue的这些实现,无法理解它们之间的区别。到目前为止我的结论:

  1. 我永远不需要SynchronousQueue
  2. LinkedBlockingQueue确保 FIFO,BlockingQueue必须使用参数 true 创建才能使其 FIFO
  3. SynchronousQueue破坏了大多数集合方法(包含、大小等)

那么我什么时候需要SynchronousQueue呢?此实现的性能是否优于LinkedBlockingQueue

为了使它更复杂......为什么Executors.newCachedThreadPool使用 SynchronousQueue 而其他人(Executors.newSingleThreadExecutorExecutors.newFixedThreadPool)使用 LinkedBlockingQueue?

编辑

第一个问题解决了。但是我仍然不明白为什么Executors.newCachedThreadPool使用 SynchronousQueue 而其他人(Executors.newSingleThreadExecutorExecutors.newFixedThreadPool)使用 LinkedBlockingQueue?

我得到的是,使用 SynchronousQueue,如果没有空闲线程,生产者将被阻塞。但是由于线程的数量实际上是无限的(如果需要,将创建新的线程),这永远不会发生。那么为什么要使用 SynchronousQueue 呢?

0 投票
2 回答
1133 浏览

java - ConcurrentLinkedQueue 与多线程一起使用

作为我项目的一部分,我需要创建一个包含固定数量的线程的线程池。当线程被分配给不同的进程时,我也需要与线程一起分配那么多会话。我想使用 ConcurrentLinkedQueue(固定的大小)来存储会话,以便当线程完成时,我可以将我的会话放回队列中,使其可用于其他进程。希望我的要求得到明确......任何人都可以给我一些quidelines至于如何实现..?如何使用 ConcurrentLinkedQueue ..?

0 投票
1 回答
2155 浏览

java - 并发 Java 1.5+ 中的活动对象模式

我正在尝试使用类在并发 Java 中开发活动对象模式。java.util.concurrent

我用 aClient和 a来描述它Server。一个样本Server如下:

和一个样本Client

一个示例Message封装是:

和一个示例运行代码:

我删除了一些实现细节来传达我的信息。

现在,问题是在什么时候,Server传入statetrue消息应该等待并且await在当前消息上调用。但是,我明白IllegalMonitorStateException这意味着当前消息不拥有当前线程来等待它。但是,我认为这很奇怪,因为当前消息在Server其线程池中被调用,因此当前消息也可以访问当前执行线程。

如果您有任何想法或建议,或者使用java.util.concurrent. 提前致谢。

更新:我在这篇
文中讨论了我可以部署的解决方案。我希望它可以帮助。

0 投票
7 回答
3962 浏览

java - 如何让一个java线程等待另一个线程的结果?

我经常需要让一个线程等待另一个线程的结果。似乎在 java.util.concurrent 中应该对此有一些支持,但我找不到。

Exchanger与我所说的非常接近,但它是双向的。我只希望线程 A 在线程 B 上等待,而不是让两者相互等待。

是的,我知道我可以使用 CountDownLatch 或 Semaphore 或 Thread.wait() 然后自己管理计算结果,但似乎我必须在某处缺少便利类。

我错过了什么?

更新

0 投票
4 回答
8935 浏览

java - JDK6.0 或其他库中有 Concurrent LinkedHashSet 吗?

我的代码抛出以下异常:

我想要ConcurrentLinkedHashSet修复它,

但我只发现ConcurrentSkipListSetjava.util.concurrent这是TreeSet,不是LinkedHashSet

进入JDK6.0的任何简单方法ConcurrentLinkedHashSet

感谢帮助 :)

0 投票
8 回答
211823 浏览

java - Java中有互斥锁吗?

java中是否有互斥对象或创建方法?我问是因为用 1 个许可初始化的信号量对象对我没有帮助。想想这个案例:

如果在第一次获取时发生异常,catch 块中的释放将增加许可,并且信号量不再是二进制信号量。

正确的方法会是什么?

上面的代码会确保信号量是二进制的吗?

0 投票
4 回答
258 浏览

java - java.util.concurrent 中的内存一致性

内存一致性属性中,我们知道:“在将对象放入任何并发集合之前,线程中的操作发生在另一个线程中从集合中访问或删除该元素之后的操作。”

这是否意味着:如果我在一个线程中创建一个对象并将其放入 ConcurrentLinkedQueue 中,另一个线程将看到该对象的所有属性,而无需对该对象进行其他同步?

例如:

在一个线程中:

............

............

在另一个线程中

......

第二个线程肯定会看到complex对象的属性吗?如果第二个线程恰好在第一个线程将对象放入队列后获取对象并打印它。

我们知道,在正常情况下,如果对象是共享的,我们应该在多线程环境中同步对象。

喜欢

0 投票
13 回答
30365 浏览

java - 按顺序运行 Java 线程

你将如何顺序执行三个线程?例如。线程 1、线程 2、线程 3。不可能将一个线程的引用传递给另一个线程并从 run() 方法调用。

所以代码应该是这样的:

输出应该是

这可以通过使用 ThreadPoolExecutor 和使用阻塞队列来实现,但即使这样也不是一个可接受的答案。

0 投票
1 回答
1331 浏览

java - 为什么 Java.util.concurrent.TimeUnit 类型在 Android 中不可用大于 SECONDS?

我想念自 API 级别 1 以来MINUTES, HOURS, DAYS就存在于文档中的 (我为应用程序使用 7th 或 2.1 版本)。

我已经阅读了这个问题,其中也指出了这个遗漏(虽然,它不在问题本身中),但作为解决方案只提出了自己的计算。

我并不懒惰,但我将一些数据发送到服务器(Java 项目),在那里TimeUnit.MINUTES或被TimeUnit.HOURS积极使用。只是想避免错误。

将不胜感激任何帮助。