问题标签 [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 回答
839 浏览

scala - 如何从 scala 伴随对象中获取 AtomicReferenceFieldUpdater?

如果我在某个集合结构中有一个链接节点,我真的不希望它的下一个链接是 AtomicReference(我需要原子 CAS 更新),所以我将其声明为:

然后在同伴中声明:

在运行时我收到以下错误:

因此,在运行时伴生对象concurrent.Link$不是concurrent.Link,并且不同的类不能访问另一个类的私有成员。

但是,如果我javap -p concurrent.Link

我得到:

所以,除了我的类AtomicReferenceFieldUpdater上声明的静态实例之外,我什么都有。Link

问题是,如何AtomicReferenceFieldUpdater在 Scala 中获得一个指向 volatile var 的实例?

到目前为止,我发现的唯一方法是返回 Java(使用下一个 Node 字段和 static 实现 AbstractLink AtomicReferenceFieldUpdater)并从中继承,这很难看。

0 投票
2 回答
3363 浏览

java - java.util.concurrent.Executor 是如何工作的?

如何java.util.concurrent.Executor创建“真实”线程?假设我正在实现 Executor 或使用任何 executor 服务(如 ThreadPoolExecutor)。JVM 内部是如何工作的?

0 投票
2 回答
2670 浏览

java - 你如何“忽略” java.util.concurrent.Future 对象?

你能发现错误吗?这将抛出一个java.lang.OutOfMemoryError.

错误是我调用executorService.submit()而不是executorService.execute(),因为submit()返回一个Future我忽略的对象。有了execute(),这个程序实际上将永远运行。

然而,一个人并不总是拥有一种execute()方法,比如使用 a 时ScheduledExecutorService

一个不返回任何东西,只计算的任务应该做什么?

任何想法将不胜感激!

编辑:看起来很有希望,但它只会清除已取消ThreadPoolExecutor的任务。purge()

0 投票
3 回答
3939 浏览

java - 并发 - 数据库访问

我需要处理检索待处理记录并将它们更新为“处理中”状态作为工作单元。我想确保下面的代码支持并发和其他线程等到我当前的线程被处理。实现这一目标的最佳方法是什么?

非常感谢您的意见。谢谢。

0 投票
5 回答
5518 浏览

java - max 的线程安全实现

我需要为 Web 服务器实现全局对象收集统计信息。我有Statistics 单例,它有方法addSample(long sample),随后调用updateMax. 这显然必须是线程安全的。我有这种方法可以更新整个统计信息的最大值:

这个实现正确吗?我正在使用 java.util.concurrent,因为我相信它会比 simple 更快synchronized。有没有其他/更好的方法来实现这个?

0 投票
2 回答
1712 浏览

java - 如何在线程安全环境中定义静态 Arraylist

如何在线程安全环境中定义静态 Arraylist。我尝试过同步关键字,但听说使用 java concurrent 包中的 Automic 类是静态数组列表的最佳解决方案。谁能告诉如何以安全的方式声明和使用静态数组列表?

更新:

在我的代码中,我有一个静态列表来维护您登录应用程序的详细信息

在登录和访问主页期间(所有时间主页都被访问)检查 userSessionList 中的用户详细信息,如果不可用,则在 userSessionList 中添加详细信息,并在注销期间从列表中删除用户详细信息。登录期间

注销期间

所以有机会同时发生读写请求

0 投票
5 回答
11117 浏览

java - 为什么 iterator.hasNext 不能与 BlockingQueue 一起使用?

我试图在 BlockingQueue 上使用迭代器方法,发现 hasNext() 是非阻塞的 - 即它不会等到添加更多元素,而是在没有元素时返回 false。

所以这里有问题:

  1. 这是糟糕的设计,还是错误的期望?
  2. 有没有办法将 BLockingQueue 的阻塞方法与它的父 Collection 类方法一起使用(例如,如果某个方法期望一个集合,我可以传递一个阻塞队列并希望它的处理将等到队列有更多元素)

这是一个示例代码块

此代码最多只打印一次迭代。

0 投票
5 回答
6965 浏览

java - 具有 getAndWait() 方法的 HashMap 是否存在?例如 BlockingConcurrentHashMap 实现?

许多线程可能会填充一个HashMap,在某些情况下我需要等待(阻塞)直到 HashMap 中存在一个对象,例如:

想知道这样的事情是否已经存在,我讨厌重新发明轮子。

0 投票
1 回答
190 浏览

java - 为什么 ConcurrentHashMap$HashEntry 中的“下一个”字段是最终字段

我正在阅读 java.util.ConcurrentHashMap 的源代码,发现nextConcurrentHashMap$HashEntry 中的字段是 final 的。有两种操作可以修改next:add 和 remove 的值。但是即使该next字段不是最终的,这两个操作也可以安全地完成线程。所以我不明白为什么这个next领域是最终的,谁能告诉我为什么?谢谢。

0 投票
1 回答
302 浏览

java - 在 JVM 中操作线程实现

最近,我一直致力于将并发对象部署到多核上。在一个示例中,我使用了BlockingQueue.take()方法,其规范中提到它是阻塞的。这意味着该方法不会释放封闭线程的资源,以便可以将其重新用于其他并发任务。这很有用,因为 JVM 实例中的活动线程总数是有限的,如果应用程序需要数千个活动线程,那么能够重用挂起的线程至关重要。另一方面,JVM 在 Java 中使用从应用程序级线程到操作系统级线程的 1:1 映射;即每个Java Thread 实例都成为一个底层操作系统级线程。

当前的解决方案基于java.util.concurrencyJava 1.5+。尽管如此,我们仍需要可扩展到大量的工作线程。现在,我有兴趣找到以下答案:

  • 有什么方法可以替换java.lang.ThreadJVM 中的实现,以便我可以插入自己的 Thread 实现?
  • 这是否只能通过调整 JVM 中线程实现的 C++ 部分并重新编译来实现?
  • 是否有任何库可以提供一种方法来替换 Java 中的经典线程?
  • 同样,在同一行中,是否有一个库或一种方法来指导Java 中的某些线程如何映射到操作系统级别的一个线程?

我还发现讨论了 JVM 的不同实现,我不确定它们是否有帮助。

提前感谢您的意见和想法。