java.util.concurrent相关内容

在Java中启动/暂停/恢复方法

可能重复: 我想实现一个随时k-分类器,但我找不到一种方法来调用“classify(...)”方法一个特定的时间,暂停它,获得可用的结果之前,该方法被暂停,恢复该方法一段特定的时间,暂停 提前感谢! 解决方案 我发布了一个 PauseableThread 。 您可以使用 ReadWriteLock 实现暂停。如果你暂时抓住一个写锁定,每次你有机会暂停,那么你只需要paus ..

如何使ScheduledExecutorService在其计划任务被取消时自动终止

如果网络连接已打开超过几个小时,我使用 ScheduledExecutorService 关闭网络连接。然而,在大多数情况下,网络连接在超时之前关闭,所以我取消 ScheduledFuture 。在这种情况下,我还希望执行器服务终止并释放它的线程池。 令我惊讶的是,这不是开箱即用:虽然我有在执行器服务调度任务后调用 shutdown(),当其唯一的计划任务被取消时,执行器服务不会自动终止。从 ..
发布时间:2016-12-26 20:13:21 Java开发

ArrayBlockingQueue:并发put和take

为什么ABQ没有使用LinkedBlockingQueue的方式实现。我们可以使用AtomicInteger来保持ABQ中的轨道计数也与LBQ相同。我们可以使用ABQ的两个锁。 我绊倒了类似的问题。 ArrayBlockingQueue使用单个锁定插入和删除,但LinkedBlockingQueue使用2个独立的锁 但我不明白这个问题的答案。我需要帮助理解,如果我们实现ABQ使用两个锁会出 ..

在Java中的每键阻塞映射

我正在处理一些第三方库代码,涉及创建昂贵的对象并将它们缓存在 Map 中。现有的实现类似于 lock.lock() try { Foo result = cache。 get(key); if(result == null){ result = createFooExpensively(key); cache.put(key,result); } return resu ..
发布时间:2016-12-26 19:25:47 Java开发

如何阻止和等待使用AtomicBoolean

我正在寻找一种暂停一个线程的方法。 我开始使用布尔标志(称为'paused'), while循环(暂停)。 在while循环中有一个 Thread.wait()来阻止执行。 我一直在查看 AtomicBoolean ,它似乎做到了,它不会阻止。 有一个替代或扩展版本的AtomicBoolean,它有一个块方法? ie例如 AtomoicBoolean.get(fals ..
发布时间:2016-12-26 19:19:16 Java开发

ConcurrentHashMap jdk 8使用TreeNodes而不是List ..为什么?

您好,我知道 ConcurrentHashMap before jdk 8 之前的工作方式。 我也理解代码,它是相当模块化,不是很难理解。 ConcurrentHashMap jdk 8的代码已经从以前的实现中改变了很多。 由于问题分类过宽,我会尝试非常具体。 CHMv8使用TreeBin 因此我的问题是什么是使用TreeBin在LinkedList的主要优点。 http:/ ..

单线程一个任务没有排队进一步的请求

我需要异步执行任务,而丢弃任何进一步的请求,直到任务完成。 同步方法只是将任务排队,不会跳过。我最初想到使用SingleThreadExecutor,但它也排队任务。然后我查看了ThreadPoolExecutor,但它读取队列以获得要执行的任务,因此将有一个任务执行和最少一个任务排队(其他可以使用ThreadPoolExecutor.DiscardPolicy丢弃)。 我唯一可以想到 ..
发布时间:2016-12-26 18:20:51 Java开发

ConcurrentLinkedQueue $ node保留在堆中remove()

我有一个多线程应用程序编写和读取ConcurrentLinkedQueue,这在概念上用于回退列表/表中的条目。我最初使用一个ConcurrentHashMap为这,工作很好。需要跟踪订单条目的新要求,因此可以根据一些条件以最旧的第一顺序删除它们。 ConcurrentLinkedQueue似乎是一个不错的选择,在功能上它工作得很好。 可配置的条目数量保存在内存中,当提供一个新条目时,到达时 ..
发布时间:2016-12-26 18:20:39 Java开发

AtomicBoolean,设置标志一次,neccesary?可以静态布尔是否确定?

我设置一个由任何线程设置一次的标志。所有其他线程将在不同的时间,经常读这个标志反复。 现在我使用一个AtomicBoolean,它工作正常,但我知道,如果它被频繁地查询它可能比普通布尔,这是真的 )。 是否可以线程安全地改为静态布尔值?将标志设置为true通过谁能做到这一点,事实上,他们可能被允许设置标志几次。 我所关心的是,那些阅读国旗的人能够迅速找到它?会是正确的吗?或者他们 ..
发布时间:2016-12-26 17:50:27 Java开发

Java并发对象池?

我试图将外部非线程安全库集成到我的web项目;我发现,为每个客户端线程创建此对象的实例太贵了。 因此,我想创建一个具有以下属性的对象池。 动态对象创建,池中的对象是动态创建的,而不是在构造函数中创建。池最初为空,并且当客户端线程获取资源对象时,池可以按需创建新的资源。一旦达到创建的对象的数量达到池的大小;那么新的客户端线程将被阻塞,并等待其他线程回收资源。 池应该公平,公平性确保请求 ..

限制线程计数和Java并发

我无法找到使用最新JAVA并发例程的此特定案例的示例。 我计划使用线程来处理来自可能包含0到数千个请求的打开队列中的项目。我想限制所以在任何给定的时间有不少于0,不超过10个线程处理队列项。 有一个Java并发进程面向这个特定类型的case? 解决方案 我认为线程池是你正在寻找。查看ExecutorService和Executors。 ExecutorService: h ..
发布时间:2016-12-26 16:31:13 Java开发

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

我有32个机器线程和一个 ConcurrentHashMap map ,其中包含大量的键。 键定义了一个公共方法 visit()。我想使用我已经提供的处理能力和可能的某种线程池来 visit() map的每个元素一次。 我可以尝试: 我可以使用方法 map.keys code>。可以使用 nextElement()来迭代结果 Enumeration ..
发布时间:2016-12-26 16:19:56 Java开发

我可以使用ForkJoinPool的工作窃取行为来避免线程饥饿死锁吗?

如果池中的所有线程都在等待同一个池中的排队任务完成,则在正常线程池中会出现线程饥饿死锁。 ForkJoinPool 通过从 join()调用内部的其他线程中窃取工作来避免此问题,而不是简单地等待。例如: private static class ForkableTask extends RecursiveTask { private final CyclicBarri ..

需要简单的解释如何“锁定条纹”使用ConcurrentHashMap

根据Java Concurrency in Practice,第11.4.3章说: 锁分裂有时可以扩展到分区 锁定一组变量的独立对象,在这种情况下 它被称为锁定条带化。例如, 的实现ConcurrentHashMap使用16个锁的数组,每个锁保护散列桶的1/16 ; bucket N被N mod 16保护。 我仍然有问题来理解和可视化锁条带和桶机制。 有人可以用很好的理解词解 ..

顺序运行Java线程

如何顺序执行三个线程?例如。 Thread1,Thread2,Thread3。不可能将一个线程的引用传递给另一个线程,并从run()方法调用。 所以代码应该是这样: Thread1.start(); Thread2.start(); Thread3.start(); 并且输出应为 打印Thread1 打印Thread2 打印Thread3 ..
发布时间:2016-12-26 15:40:40 Java开发