java.util.concurrent相关内容
我的问题是关于 synchronizedList 方法集合类. Javadocs 说: 用户在迭代返回的列表时必须手动同步: List list = Collections.synchronizedList(new ArrayList());...同步(列表){迭代器 i = list.iterator();//必须在同步块中而 (i.hasNext())富(i.next());}
..
我想接受一个输入并在其上应用并行流,然后我想输出为列表.输入可以是我们可以应用流的任何列表或任何集合. 我担心的是,如果我们想要输出作为映射它们,我们有一个来自 java 的选项,就像 list.parallelStream().collect(Collectors.toConcurrentMap(args)) 但是我看不到以线程安全的方式从并行流中收集以提供列表作为输出的选项.我在那里
..
我对 OpenJDK 的 LinkedBlockingQueue 实现(在 java.util.concurrent 中)中的 Node 类的结构有点困惑. 我已经复制了以下节点类的描述: 静态类节点{E项;/*** 其中之一:* - 真正的后继节点* - 这个Node,表示后继者是head.next* - null,表示没有后继节点(这是最后一个节点)*/节点 E下一个;节点(E
..
Java 8 引入了获取并发 Set 实现的新方法 //Pre-Java-8 方式创建并发集设置oldStyle = Collections.newSetFromMap(new ConcurrentHashMap());//Java 8 中的新方法设置newStyle = ConcurrentHashMap.newKeySet(); 有什么理由更喜欢新方法吗? 有
..
我有一个 Java 程序,它接收一个包含文本文件列表的文本文件,并分别处理每一行.为了加快处理速度,我使用带有 24 个线程的 FixedThreadPool 的 ExecutorService 线程.该机器有 24 个内核和 48GB 内存. 我正在处理的文本文件有 250 万行.我发现对于前 230 万行左右的内容,在 CPU 利用率很高的情况下运行得非常好.然而,超过某个点(大约 2.
..
我有 32 个机器线程和一个 ConcurrentHashMapmap,其中包含很多键.Key 定义了一个公共方法 visit().我想visit() 使用我可用的处理能力以及可能的某种线程池,只对 map 的每个元素进行一次. 我可以尝试的事情: 我可以使用 map.keys() 方法.生成的 Enumeration 可以使用 nextElement() 进行迭
..
我看到 JCIP 一书中广泛使用了上述注释.我认为它真的很有用,因为即使没有适当的文档,它也说明了一些关于同步策略的内容.我还看到 Intellij Idea 使用了这些注释 他们现在实际上Java 语言本身的一部分? 解决方案 这些是不属于标准 JDK 的自定义注解.为了能够在您的代码中使用它们,您需要添加一个依赖项. 在 jcip.net 上,页面底部有一个指向图书馆及其来源的链
..
如果我们使用 ExecutorCompletionService,我们可以提交一个一系列任务作为 Callable 并获得与 CompletionService 交互的结果作为 queue. 但是还有ExecutorService的invokeAll,它接受一个Collection的任务,我们得到一个Future检索结果. 据我所知,使用一个或另一个没有任何好处(除了我们使用 invo
..
我花了一段时间学习 Scala 执行上下文、底层线程模型和并发性的主题.你能解释一下 scala.concurrent.blocking “调整运行时行为" 和 “可以提高性能或避免死锁" 所描述的哪些方式吗?在 scaladoc? 在文档中,它被呈现为一种等待 api 的方法,它不会实现等待.(也许也应该包装长时间运行的计算?). 它实际上是做什么的? 遵循源代码轻易泄露它的秘
..
我有一个场景,我必须为同一个可调用对象异步执行 5 个线程.据我了解,有两种选择: 1) 使用提交(Callable) ExecutorService executorService = Executors.newFixedThreadPool(5);列表>期货 = 新的 ArrayList();for(Callable callableItem: myCallableLi
..
你将如何顺序执行三个线程?例如.线程 1、线程 2、线程 3.不可能将一个线程的引用传递给另一个并从 run() 方法调用. 所以代码应该是这样的: Thread1.start();Thread2.start();Thread3.start(); 输出应该是 打印线程 1打印线程2打印线程3 这可以通过使用 ThreadPoolExecutor 和使用阻塞队列来实现,但即使这样也
..
Java 6 在提高内在锁性能方面的四个主要变化之一是Adapative Spinning 技术.究竟什么是自适应旋转?它是 spinlocks 和互斥锁的组合吗?有人能用简单易懂的方式解释这种策略的用处,JDK6 以后默认提供这种策略. 解决方案 究竟什么是自适应旋转? 引用此Java 6 性能页面: 自适应自旋是一种优化技术,其中尝试竞争同步进入操作的线程使用两阶段自旋
..
我的一个应用程序在一段时间内在负载下运行时挂起,有没有人知道什么会导致 jstack 中出现这样的输出: "scheduler-5" prio=10 tid=0x00007f49481d0000 nid=0x2061 等待条件 [0x00007f494e8d0000]java.lang.Thread.State: WAITING(停车)在 sun.misc.Unsafe.park(本地方法)-
..
java 中是否有互斥对象或创建一个对象的方法?我问是因为用 1 个许可初始化的信号量对象对我没有帮助.想想这个案例: 尝试{semaphore.acquire();//做东西semaphore.release();} 捕获(异常 e){semaphore.release();} 如果第一次acquire发生异常,catch块中的释放会增加许可,信号量就不再是二元信号量了. 正确的方法是
..
在 JDK8 中,当我使用 parallelStream 时会产生多少线程?例如,在代码中: list.parallelStream().forEach(/** Do something */); 如果这个列表有 100000 个项目,会产生多少线程? 此外,每个线程都获得相同数量的项目来处理还是随机分配? 解决方案 Oracle 的并行流实现[1] 使用当前线程,此外,如果需要
..
我听说 Java 8 提供了很多关于并发计算的实用程序.因此,我想知道并行化给定 for 循环的最简单方法是什么? public static void main(String[] args){设置服务器 = getServers();映射serverData = new ConcurrentHashMap();对于(服务器服务器:服务器){String serverId = server.ge
..
我在我的多线程应用程序中使用了 Java Executors,但我似乎无法弄清楚使用以下每种方式的最佳时间: 1. ExecutorService executor=Executors.newFixedThreadPool(50);executor.execute(new A_Runner(...一些参数...));executor.shutdown();while (!executor.
..
java.util.concurrent API 提供了一个名为 Lock 的类,它基本上将序列化控件以访问关键资源.它提供了诸如 park() 和 unpark() 等方法. 如果我们可以使用 synchronized 关键字并使用 wait() 和 notify() notifyAll() 方法,我们可以做类似的事情. 我想知道其中哪一个在实践中更好,为什么? 解决方案 如
..
我的 android 应用中有以下代码: /*** 获取数据后执行的回调.*/public void OnPointsFetch(ArrayList result) {切换加载器(假);this.shops = 结果;如果(activeFilter == Constants.POINTS_FILTER_AVAILABLE){for(商店:结果){if(s.getClientPoints().ge
..
Future.get(timeout) 在给定的超时后不会可靠地抛出 TimeoutException.这是正常行为还是我可以做些什么来使其更可靠?这个测试在我的机器上失败了.但是,如果我睡 3000 次而不是 2000 次,它就会过去. public class FutureTimeoutTest {@测试public void test() 抛出执行异常,中断异常{ExecutorServi
..