java.util.concurrent相关内容

以固定的速率安排可呼叫对象

我有一个要以固定速度运行的任务.但是,每次执行后,我还需要任务的结果.这是我尝试过的: 任务 class ScheduledWork实现了Callable.{公共字符串call(){//执行任务并以字符串形式返回结果}} 否,我尝试使用 ScheduledExecutorService 进行计划.事实证明,您不能以固定的速率安排 Callable ,只能执行 Run ..
发布时间:2021-05-18 20:03:30 Java开发

Thread :: yield vs Thread :: onSpinWait

标题基本上说明了所有内容,还有我真的很想知道何时使用它们的少量补充.这可能很简单-我已经阅读了它们的文档,但仍然不能说出太多区别. 这里有这这样的答案,基本上都是这样: 屈服对于忙碌的等待也很有用... 我不同意它们,原因很简单,因为 ForkJoinPool 在内部使用 Thread :: yield ,而这是jdk世界中的一个很新的功能. 真正困扰我的是jdk中的用法( ..
发布时间:2021-04-23 20:36:06 Java开发

确保连续的项目顺序的PriorityBlockingQueue

我正在接收一系列消息,我想按它们的顺序处理它们.每个消息都有一个序列号.有一个线程池接收它们.我想将它们放入 PriorityBlockingQueue 之类的阻塞队列中,并以正确的顺序读取它们,阻塞直到下一条连续消息可用为止. 例如给出以下代码: ConsecutiveBlockingQueueq =新的ConsecutiveBlockingQueue();新线 ..

Java ForkJoinPool的compute()方法中的同步

在Java中:我们阅读的完整参考资料: 通常,ForkJoinTask不应使用同步方法或 同步代码块.另外,您通常不希望拥有 compute()方法使用其他类型的同步,例如 信号量 为什么要避免在compute()中进行同步? 在某些情况下是否仍可以使用同步,例如信号量或已同步? 我应该从java.util.concurrent使用什么其他方法来拥有如ForkJoinTask和同步中可 ..
发布时间:2021-02-10 18:31:25 Java开发

如何处理来自CompletableFuture.runAsync的未捕获异常

我们的应用程序包含一些异步运行的代码,但失败了.像这样: CompletableFuture.runAsync( () -> { throw new RuntimeException("bad"); }, executorService ); 我们希望使用默认的异常处理代码来捕获这些错误,以防万一特定用途忘记处理异常(这是由生产错误引起的). 这显然很棘手. 处理J ..

如果取消时正在运行runnable,如何取消ShceduledFuture并等待runnable停止?

当在任何ScheduledExecutorService上以固定速率调度任何命令时,它返回ScheduledFuture,也可以将其取消. 但是“取消"不能保证取消返回后命令仍未执行,例如,因为调用“取消"时命令已经在执行中间. 对于大多数用例来说,它已经足够了.但是我需要在取消后阻塞当前线程的情况下处理用例,如果命令已经在执行中,请等到命令完成.换句话说,如果命令仍在执行,则称为“取消"的 ..
发布时间:2021-02-10 18:31:10 Java开发

从AtomicLongArray获取数组

我想使用Java 1.6和AtomicLongArray将原始的AtomicLongArray复制到一个新的AtomicLongArray中.有一个构造函数需要一个数组(AtomicLongArray(long [])),所以我想我可以从原始数组中获取该数组并将其提供给构造函数. 遗憾的是,AtomicLongArray中的实际long []是私有的,似乎没有吸气剂.有什么方法可以做到,这意 ..
发布时间:2021-02-10 18:31:07 Java开发

Java:如何获取ConcurrentHashMap的静态快照?

Java文档表示,映射支持方法values()和entrySet()的返回值.因此,对地图的更改会反映在集合中,反之亦然.我不希望这种情况发生在我的静态副本上.本质上,我希望在DS上完成许多并发操作.但是对于某些情况,我想遍历其静态快照.我想遍历静态快照,因为我假设与同时更新的版本相比,遍历静态快照会更快. 解决方案 简单地制作一份副本,新的HashMap将与原始副本无关. Set ..
发布时间:2021-02-10 18:31:04 Java开发

Java 8中的异步方法及其后并行执行的方法

花了一天的时间学习有关Java并发API的知识之后,我仍然不太了解如何借助CompletableFuture和ExecutorService类来创建以下功能: 当我在REST端点上收到请求时,我需要: 启动一个异步任务(包括数据库查询,过滤等),这将在末尾给我一个字符串URL列表 与此同时,用HTTP OK响应REST调用者,该请求已收到,我正在处理它 异步任务完成后,我需要将HT ..
发布时间:2021-02-10 18:31:01 Java开发

ReentrantReadWriteLock中的读写锁是否以某种方式相关?

请向我解释更多合同.我不知道ReentrantReadWriteLock中包含的两个锁是否以某种方式相关?还是这些只是两个普通锁的捆绑? 解决方案 如果线程正在等待读锁,则共享该锁,但是当线程想要获取写锁时,仅允许该线程进行互斥访问. 因此允许任何一种操作.if lock is held by readers and thread request write lock no more ..
发布时间:2021-02-10 18:30:54 Java开发

ConcurrentHashMap有什么缺点吗?

我需要一个可以从多个线程访问的HashMap. 有两个简单的选项,使用普通的HashMap并对其进行同步,或者使用ConcurrentHashMap. 由于ConcurrentHashMap不会阻止读取操作,因此它似乎更适合我的需求(几乎只进行读取,几乎从不更新). 另一方面,我希望并发性非常低,因此应该没有阻塞(只是管理锁的成本). 如果有所不同的话,地图也将非常小(少于10个 ..

Phaser和CyclicBarrier之间的区别

我偶然发现了Java并发包中CyclicBarrier和Phaser实用程序之间的差异的疑问. 我知道CyclicBarrier允许线程组等待,直到所有线程到达特定点为止.移相器也可以这样做,但是它支持多个阶段. 我也了解,可以重用 CyclicBarrier..我认为该重用工具使其功能与Phaser 相同. 考虑以下程序: 测试阶段工具: import java.util ..
发布时间:2021-02-10 18:30:48 Java开发

等待一批期货完成时超时?

我有一组Futures,是通过将Callable提交给Executor创建的.伪代码: for all tasks futures.add(executor.submit(new callable(task))) 现在,我希望所有期货最多等待n秒,直到全部完成.我知道我可以打电话给Future#get(timeout),但是如果我为一个循环中的所有期货顺序地打电话给Future#ge ..
发布时间:2021-02-10 18:30:45 Java开发

使用AtomicReference.compareAndSet设置对数据库调用结果的引用是否合适?

我正在实现一个简单的缓存,该缓存存储为AtomicReference. private AtomicReference> cacheData; 应该从数据库表中(延迟地)填充缓存对象. 我提供了一种将缓存数据返回给调用者的方法,但是如果数据为空(即未加载),则代码需要从数据库加载数据.为了避免同步,我想到了使用compareAndSet()方 ..
发布时间:2021-02-10 18:30:39 Java开发