java.util.concurrent相关内容
我正在尝试使用三个线程打印1到10之间的数字。线程1打印1,2打印2,3打印3,4再次由线程1打印,依此类推。 我创建了一个共享打印机资源,可以帮助这些线程打印号码。但我感到很困惑,因为我怎么能让所有线程都能看到这个数字。 问题是每个线程都看到了他们自己的数字副本,而我需要相同的所有线程共享的数字。 我正在尝试创建此示例以用于学习目的。我在SO上看到过其他类似问题的页面,但我无法
..
我有一个Java程序,它接收一个包含文本文件列表的文本文件,并分别处理每一行。为了加快处理速度,我使用带有24个线程的FixedThreadPool的ExecutorService来使用线程。该机器有24个内核和48GB内存。 我正在处理的文本文件有250万行。我发现,对于前230万行左右,CPU运行率很高,运行良好。然而,超过某些点(大约在2.3行),性能退化,只使用了一个CPU,我的程序
..
在接受采访时被问到这个问题,试图解决它......但没有成功。 我想到使用CyclicBarrier 有三个线程T1打印1,4,7 ... T2打印2,5,8 ...和T3打印3,6,9 ......你如何将这三个同步到打印序列1,2,3,4,5,6,7,8,9 .... 我试过写&运行以下代码 public class CyclicBarrierTest { public
..
我想获取输入并对其应用并行流,然后我想将输出作为列表。输入可以是我们可以应用流的任何List或任何集合。 我关注的是,如果我们想要输出作为映射它们我们有一个来自java的选项就像 list.parallelStream()。collect(Collectors.toConcurrentMap(args)) 但我没有选择以线程安全的方式从并行流中收集以提供列表作为输出。
..
许多线程可能会填充 HashMap ,在某些情况下我需要等待(阻塞)直到HashMap中存在一个对象,例如: BlockingConcurrentHashMap map = new BlockingConcurrentHashMap(); Object x = map.getAndWait(key,1000); //(object_to_get,max_delay_ms)
..
全部! 我在LinkedBlockingQueue中发现了奇怪的代码: private E dequeue(){ // assert takeLock.isHeldByCurrentThread(); 节点 h =头; 节点 first = h.next; h.next = h; //帮助GC head = first; E x = first.it
..
正如问题标题本身所说的那样,Executors和ExecutorCompletionService类之间的区别是什么? 我是Threading的新手,所以如果任何人可以用一段代码,这将有很大的帮助。 解决方案 假设你有一组任务 A ,B,C,D,E 并且您希望在 Executor 中异步执行它们,并在完成时逐个处理结果。 使用执行者,您可以这样做: 列表
..
我有一个场景,我必须为同一个callable异步执行5个线程。据我了解,有两种选择: 1)使用提交(可调用) ExecutorService executorService = Executors.newFixedThreadPool(5); 列表> futures = new ArrayList(); for(Callable calla
..
我正在使用ExecutorService线程池执行可调用对象。我想给这个帖子命名。 更具体地说,在旧版本中我做了这个 - Thread thread = new Thread(runnable Task); thread.setName(“我的主题名称”); 我在log4j日志记录中使用线程名称,这在故障排除时有很大帮助。现在我将我的代码从Java 1.4迁移到
..
是否可以使用 Collections.synchronizedMap()重写下面的代码片段,同时保持并发性的正确性? Collections.synchronizedMap(new WeakHashMap()); 即。有什么来自java.util.concurrent可以使用吗?请注意,仅替换为 new ConcurrentHash
..
在JDK8中,当我使用parallelStream时会产生多少个线程?例如,在代码中: list.parallelStream()。forEach(/ ** Do Something * /); 如果此列表包含100000个项目,将生成多少个线程? 另外,每个线程都可以获得相同数量的项目,还是随机分配? 解决方案 并行流的Oracle实现[1]使用当前线
..
希望通过 ExecutorService 。 但是现在不支持(仅支持可调用任务的集合) 这有什么特别的原因吗?做类似事情的替代方法是什么。 解决方案 只需将runnable转换为callables: 列表> callables = new ArrayList(); for(Runnable r:runnables){ callabl
..
在阅读有关内存一致性错误的Java文档时。我找到与创建发生的两个动作相关的点 - 在关系之前: 当语句调用 Thread时.start(),每个具有 的语句在与该语句的关系发生之前还与 执行的每个语句之间发生 线。新线程可以看到导致创建 新线程的代码的影响。 当线程终止并导致一个 Thread.join()在另一个线程 中返回,然后由终止的 线程执行的所有语句都发生在之前成
..
所以我有一个生成线程(~5-150)的程序,它执行一堆任务。最初我使用 FixedThreadPool ,因为这个类似的问题建议他们更适合长寿命的任务,而且由于我对多线程的了解非常有限,我认为线程的平均寿命(几分钟)“长寿”。 但是,我最近添加了生成其他线程的功能,这样做会使我超出我设置的线程限制。在这种情况下,最好猜测并增加我可以允许的线程数或切换到 CachedThreadPool 所以
..
这是JavaDoc关于 ConcurrentHashMap 的一段话。它说检索操作通常不会阻塞,因此可能与更新操作重叠。这是否意味着 get()方法不是线程安全的? “但是,即使所有操作都是线程安全的,检索 操作也不需要锁定,并且没有任何支持 以阻止所有访问的方式锁定整个表。此类 在依赖于 线程安全但不依赖于其同步细节的程序中,Hashtable可与Hashtable完全互操作。
..
我想知道关闭 shutdown()和 shutdownNow()之间的基本区别c $ c>执行者服务?据我所知 shutdown()应该用于 graceful 关闭,这意味着应该允许所有正在运行和排队等待处理但未启动的任务完成并且 shutdownNow() 突然关闭意味着一些未完成的任务任务被取消,未启动的任务也被取消。还有其他隐含/明确我缺少的吗? PS:我在 SO 与此相关但不完全是我
..
Hi Every One 我使用包含添加到MultiColumnText的PdfPTable的iText生成的pdf报告,有时变得太大以至于它会被拆分多页, 这里添加了示例代码,其工作为 Page -1 --------------------------- -------------------------------------------------- -----------
..
此问题直接从我之前的这个问题在这里。我认为我的第二个问题的答案是否定的。所以我想了解为什么java.util.concurrent包中没有ConcurrentLinkedHashMap?我的意思是有一个ConcurrentHashMap,但没有ConcurrentLinkedHashMap。在并发环境中有这样一个课程是否没有任何意义?我的意思是这里的主要技术原因是不可用的?在Guava / Apa
..
我必须确保迭代矢量;该向量没有更新,以避免 ConcurrentModificationException 。我可以使用并发收集。但我只是想试一试Vector。下面是我写的代码。 public class TestConcurrentModification1 { Vector a = new Vector public static void main(String [] ar
..
我想使用Java实现各种发布商/订阅者模式,并且目前运行的想法不多。 有1个发布商和N个订阅者发布对象,则每个订阅者需要以正确的顺序处理每个对象一次且仅一次。发布商和每个订阅者都在自己的线程中运行。 在我原来的实现中,每个订阅者都有自己的阻塞队列,发布者将对象放入每个订阅者的队列。这工作正常,但发布商将被阻止,如果任何订阅者的队列已满。这导致性能的降低,因为每个订户在处理对象时花费不同
..