java.util.concurrent相关内容

从java 8中的并行流中收集

我想接受一个输入并在其上应用并行流,然后我想输出为列表.输入可以是我们可以应用流的任何列表或任何集合. 我担心的是,如果我们想要输出作为映射它们,我们有一个来自 java 的选项,就像 list.parallelStream().collect(Collectors.toConcurrentMap(args)) 但是我看不到以线程安全的方式从并行流中收集以提供列表作为输出的选项.我在那里 ..
发布时间:2022-01-22 10:48:22 Java开发

OpenJDK 的 LinkedBlockingQueue 实现:Node 类和 GC

我对 OpenJDK 的 LinkedBlockingQueue 实现(在 java.util.concurrent 中)中的 Node 类的结构有点困惑. 我已经复制了以下节点类的描述: 静态类节点{E项;/*** 其中之一:* - 真正的后继节点* - 这个Node,表示后继者是head.next* - null,表示没有后继节点(这是最后一个节点)*/节点 E下一个;节点(E ..

Java 线程在处理结束时变慢

我有一个 Java 程序,它接收一个包含文本文件列表的文本文件,并分别处理每一行.为了加快处理速度,我使用带有 24 个线程的 FixedThreadPool 的 ExecutorService 线程.该机器有 24 个内核和 48GB 内存. 我正在处理的文本文件有 250 万行.我发现对于前 230 万行左右的内容,在 CPU 利用率很高的情况下运行得非常好.然而,超过某个点(大约 2. ..
发布时间:2022-01-15 12:56:36 Java开发

访问 ConcurrentHashMap<Element, Boolean> 的每个元素的可扩展方式恰好一次

我有 32 个机器线程和一个 ConcurrentHashMapmap,其中包含很多键.Key 定义了一个公共方法 visit().我想visit() 使用我可用的处理能力以及可能的某种线程池,只对 map 的每个元素进行一次. 我可以尝试的事情: 我可以使用 map.keys() 方法.生成的 Enumeration 可以使用 nextElement() 进行迭 ..
发布时间:2022-01-08 14:35:17 Java开发

@GuardedBy 、 @ThreadSafe 、@NotThreadSafe

我看到 JCIP 一书中广泛使用了上述注释.我认为它真的很有用,因为即使没有适当的文档,它也说明了一些关于同步策略的内容.我还看到 Intellij Idea 使用了这些注释 他们现在实际上Java 语言本身的一部分? 解决方案 这些是不属于标准 JDK 的自定义注解.为了能够在您的代码中使用它们,您需要添加一个依赖项. 在 jcip.net 上,页面底部有一个指向图书馆及其来源的链 ..
发布时间:2021-12-28 23:03:43 Java开发

ExecutorCompletionService?如果我们有 invokeAll 为什么需要一个?

如果我们使用 ExecutorCompletionService,我们可以提交一个一系列任务作为 Callable 并获得与 CompletionService 交互的结果作为 queue. 但是还有ExecutorService的invokeAll,它接受一个Collection的任务,我们得到一个Future检索结果. 据我所知,使用一个或另一个没有任何好处(除了我们使用 invo ..

scala.concurrent.blocking - 它实际上是做什么的?

我花了一段时间学习 Scala 执行上下文、底层线程模型和并发性的主题.你能解释一下 scala.concurrent.blocking “调整运行时行为" 和 “可以提高性能或避免死锁" 所描述的哪些方式吗?在 scaladoc? 在文档中,它被呈现为一种等待 api 的方法,它不会实现等待.(也许也应该包装长时间运行的计算?). 它实际上是做什么的? 遵循源代码轻易泄露它的秘 ..
发布时间:2021-12-28 22:47:17 其他开发

按顺序运行 Java 线程

你将如何顺序执行三个线程?例如.线程 1、线程 2、线程 3.不可能将一个线程的引用传递给另一个并从 run() 方法调用. 所以代码应该是这样的: Thread1.start();Thread2.start();Thread3.start(); 输出应该是 打印线程 1打印线程2打印线程3 这可以通过使用 ThreadPoolExecutor 和使用阻塞队列来实现,但即使这样也 ..
发布时间:2021-12-28 22:42:21 Java开发

什么是自适应旋转 w.r.t 锁获取?

Java 6 在提高内在锁性能方面的四个主要变化之一是Adapative Spinning 技术.究竟什么是自适应旋转?它是 spinlocks 和互斥锁的组合吗?有人能用简单易懂的方式解释这种策略的用处,JDK6 以后默认提供这种策略. 解决方案 究竟什么是自适应旋转? 引用此Java 6 性能页面: 自适应自旋是一种优化技术,其中尝试竞争同步进入操作的线程使用两阶段自旋 ..
发布时间:2021-12-28 22:42:13 Java开发

Java中有互斥锁吗?

java 中是否有互斥对象或创建一个对象的方法?我问是因为用 1 个许可初始化的信号量对象对我没有帮助.想想这个案例: 尝试{semaphore.acquire();//做东西semaphore.release();} 捕获(异常 e){semaphore.release();} 如果第一次acquire发生异常,catch块中的释放会增加许可,信号量就不再是二元信号量了. 正确的方法是 ..

Java 8 中的 parallelStream 中产生了多少线程?

在 JDK8 中,当我使用 parallelStream 时会产生多少线程?例如,在代码中: list.parallelStream().forEach(/** Do something */); 如果这个列表有 100000 个项目,会产生多少线程? 此外,每个线程都获得相同数量的项目来处理还是随机分配? 解决方案 Oracle 的并行流实现[1] 使用当前线程,此外,如果需要 ..
发布时间:2021-12-28 08:44:49 Java开发

同步与锁定

java.util.concurrent API 提供了一个名为 Lock 的类,它基本上将序列化控件以访问关键资源.它提供了诸如 park() 和 unpark() 等方法. 如果我们可以使用 synchronized 关键字并使用 wait() 和 notify() notifyAll() 方法,我们可以做类似的事情. 我想知道其中哪一个在实践中更好,为什么? 解决方案 如 ..

为什么 Java Future.get(timeout) 不可靠?

Future.get(timeout) 在给定的超时后不会可靠地抛出 TimeoutException.这是正常行为还是我可以做些什么来使其更可靠?这个测试在我的机器上失败了.但是,如果我睡 3000 次而不是 2000 次,它就会过去. public class FutureTimeoutTest {@测试public void test() 抛出执行异常,中断异常{ExecutorServi ..
发布时间:2021-09-07 20:10:45 Java开发