java.util.concurrent相关内容
对于在DTO中使用ConcurrentHashSet感到有些困惑.一次有多个线程可以访问此DTO. 首例 公共类LogDTO {私人Set人= ConcurrentHashMap.newKeySet();公共无效setPerson(Set人){this.person =人;}公共SetgetPerson(){返回this.person;
..
我有一个要以固定速度运行的任务.但是,每次执行后,我还需要任务的结果.这是我尝试过的: 任务 class ScheduledWork实现了Callable.{公共字符串call(){//执行任务并以字符串形式返回结果}} 否,我尝试使用 ScheduledExecutorService 进行计划.事实证明,您不能以固定的速率安排 Callable ,只能执行 Run
..
标题基本上说明了所有内容,还有我真的很想知道何时使用它们的少量补充.这可能很简单-我已经阅读了它们的文档,但仍然不能说出太多区别. 这里有这这样的答案,基本上都是这样: 屈服对于忙碌的等待也很有用... 我不同意它们,原因很简单,因为 ForkJoinPool 在内部使用 Thread :: yield ,而这是jdk世界中的一个很新的功能. 真正困扰我的是jdk中的用法(
..
我们有一个共享的 ConcurrentHashMap ,它由2个线程读写. class测试{私有ConcurrentHashMapmap = new ConcurrentHashMap();对象read(){返回map.get(object);}void write(Object key,Object object){map.put(key,object);
..
我正在接收一系列消息,我想按它们的顺序处理它们.每个消息都有一个序列号.有一个线程池接收它们.我想将它们放入 PriorityBlockingQueue 之类的阻塞队列中,并以正确的顺序读取它们,阻塞直到下一条连续消息可用为止. 例如给出以下代码: ConsecutiveBlockingQueueq =新的ConsecutiveBlockingQueue();新线
..
在Java中:我们阅读的完整参考资料: 通常,ForkJoinTask不应使用同步方法或 同步代码块.另外,您通常不希望拥有 compute()方法使用其他类型的同步,例如 信号量 为什么要避免在compute()中进行同步? 在某些情况下是否仍可以使用同步,例如信号量或已同步? 我应该从java.util.concurrent使用什么其他方法来拥有如ForkJoinTask和同步中可
..
我正在尝试实现一个示例应用程序来测试Callable和ExecutorService接口. 在我的应用中,我有: @Bean("fixedThreadPool") public ExecutorService fixedThreadPool() { return Executors.newFixedThreadPool(5); } 然后: public void re
..
我们的应用程序包含一些异步运行的代码,但失败了.像这样: CompletableFuture.runAsync( () -> { throw new RuntimeException("bad"); }, executorService ); 我们希望使用默认的异常处理代码来捕获这些错误,以防万一特定用途忘记处理异常(这是由生产错误引起的). 这显然很棘手. 处理J
..
我对于为什么以下强制转换不起作用感到非常困惑: ScheduledThreadPoolExecutor timeoutControl = (ScheduledThreadPoolExecutor) Executors.newSingleThreadScheduledExecutor(); ScheduledThreadPoolExecutor实现ScheduledExecutorServ
..
我当前正在使用Apache Wicket.我有一些REST调用,每个调用需要几秒钟. Wicket只允许ajax同步调用,因此我试图使用Future和Callable. 这是我课程的一部分: public abstract class GetPrices extends AbstractAjaxTimerBehavior { private static final l
..
当在任何ScheduledExecutorService上以固定速率调度任何命令时,它返回ScheduledFuture,也可以将其取消. 但是“取消"不能保证取消返回后命令仍未执行,例如,因为调用“取消"时命令已经在执行中间. 对于大多数用例来说,它已经足够了.但是我需要在取消后阻塞当前线程的情况下处理用例,如果命令已经在执行中,请等到命令完成.换句话说,如果命令仍在执行,则称为“取消"的
..
我想使用Java 1.6和AtomicLongArray将原始的AtomicLongArray复制到一个新的AtomicLongArray中.有一个构造函数需要一个数组(AtomicLongArray(long [])),所以我想我可以从原始数组中获取该数组并将其提供给构造函数. 遗憾的是,AtomicLongArray中的实际long []是私有的,似乎没有吸气剂.有什么方法可以做到,这意
..
Java文档表示,映射支持方法values()和entrySet()的返回值.因此,对地图的更改会反映在集合中,反之亦然.我不希望这种情况发生在我的静态副本上.本质上,我希望在DS上完成许多并发操作.但是对于某些情况,我想遍历其静态快照.我想遍历静态快照,因为我假设与同时更新的版本相比,遍历静态快照会更快. 解决方案 简单地制作一份副本,新的HashMap将与原始副本无关. Set
..
花了一天的时间学习有关Java并发API的知识之后,我仍然不太了解如何借助CompletableFuture和ExecutorService类来创建以下功能: 当我在REST端点上收到请求时,我需要: 启动一个异步任务(包括数据库查询,过滤等),这将在末尾给我一个字符串URL列表 与此同时,用HTTP OK响应REST调用者,该请求已收到,我正在处理它 异步任务完成后,我需要将HT
..
下面是该类的源代码. 我想验证shutdownNow()如何处理未提交的任务.问题我在下面的代码中得到的是shutdownNow()返回List而不是List,我提交的List包含提交的PrimeProducer实例. In Below program I wanted to get the tasks which whe
..
请向我解释更多合同.我不知道ReentrantReadWriteLock中包含的两个锁是否以某种方式相关?还是这些只是两个普通锁的捆绑? 解决方案 如果线程正在等待读锁,则共享该锁,但是当线程想要获取写锁时,仅允许该线程进行互斥访问. 因此允许任何一种操作.if lock is held by readers and thread request write lock no more
..
我需要一个可以从多个线程访问的HashMap. 有两个简单的选项,使用普通的HashMap并对其进行同步,或者使用ConcurrentHashMap. 由于ConcurrentHashMap不会阻止读取操作,因此它似乎更适合我的需求(几乎只进行读取,几乎从不更新). 另一方面,我希望并发性非常低,因此应该没有阻塞(只是管理锁的成本). 如果有所不同的话,地图也将非常小(少于10个
..
我偶然发现了Java并发包中CyclicBarrier和Phaser实用程序之间的差异的疑问. 我知道CyclicBarrier允许线程组等待,直到所有线程到达特定点为止.移相器也可以这样做,但是它支持多个阶段. 我也了解,可以重用 CyclicBarrier..我认为该重用工具使其功能与Phaser 相同. 考虑以下程序: 测试阶段工具: import java.util
..
我有一组Futures,是通过将Callable提交给Executor创建的.伪代码: for all tasks futures.add(executor.submit(new callable(task))) 现在,我希望所有期货最多等待n秒,直到全部完成.我知道我可以打电话给Future#get(timeout),但是如果我为一个循环中的所有期货顺序地打电话给Future#ge
..
我正在实现一个简单的缓存,该缓存存储为AtomicReference. private AtomicReference> cacheData; 应该从数据库表中(延迟地)填充缓存对象. 我提供了一种将缓存数据返回给调用者的方法,但是如果数据为空(即未加载),则代码需要从数据库加载数据.为了避免同步,我想到了使用compareAndSet()方
..