java.util.concurrent相关内容

为什么Java中没有AtomicBooleanArray数据类型?

我已经注意到,Java中与AtomicIntegerArray类似的AtomicBooleanArray数据类型为 NO .尽管我可以根据当前需要使用AtomicBoolean [],但我很好奇为什么AtomicBooleanArray不属于库的一部分. 任何对此的想法将不胜感激. 谢谢 解决方案 AtomicBoolean实际上包装了一个int,它为false或true设置为 ..
发布时间:2021-02-10 18:30:36 Java开发

在ScheduledExecutorService中重新初始化修复延迟

根据我的要求,我必须在一段时间后执行一些特定的代码.为此,我选择了ScheduledExecutorService.scheduleWithFixedDelay(runnable, 0, 5, TimeUnit.SECONDS),对我来说很好.但是根据我的另一个要求,fixedDelay中提到的时间应该可以在运行时配置.意味着,当前的总延迟为5秒,但是如果用户愿意,可以将其更改为60秒,并且在运行 ..
发布时间:2021-02-10 18:30:33 Java开发

为什么Runnable的run()无法抛出检查异常?

根据 JCIP 的第6.3.2节: Runnable是一个相当有限的抽象.运行无法返回值或引发检查的异常. run()无法返回值,因为其返回类型为void,但是为什么它不能引发已检查的异常? 解决方案 它不能引发受检查的异常,因为从第一个版本开始它没有被声明为引发受检查的异常,因此更改它太危险了. 最初Runnable仅用于包装的Thread中,并且假定开发人员希望捕获所 ..
发布时间:2021-02-10 18:30:30 Java开发

为什么不执行CompletableFuture.runAsync?

我认为主线程必须在子线程之后结束.但是下面的代码显示了在打印“异步结束"之前该过程已完成.这是什么原因?有人可以解释吗? import java.util.concurrent.CompletableFuture; public class Test { public static void main(String[] args) { CompletableFutu ..
发布时间:2021-02-10 18:30:27 Java开发

为什么此代码会导致非法监视器状态异常?

下面的代码试图将随机值插入循环队列并将其删除.但是,存在一些同步问题.我知道我可以使用更高级别的例程,而我将在生产代码中使用该例程,但是我很好奇为什么这行不通?我在这里想念什么? public class CircularQueue { int count; int rear; int front; Object lock = new Object(); int size; int[] ar ..
发布时间:2021-02-10 18:30:22 Java开发

ForkJoinPool在invokeAll/join期间停顿

我尝试使用 ForkJoinPool 并行化我的CPU密集型计算. 我对ForkJoinPool的理解是,只要可以执行任何任务,它就可以继续工作.不幸的是,我经常观察到工作线程空闲/正在等待,因此并非所有CPU都保持忙碌状态.有时,我什至还观察到了其他工作线程. 我没有想到这一点,因为我严格尝试使用非阻止任务. 我的观察与 ForkJoinPool似乎浪费线程非常相似. 在对ForkJoin ..
发布时间:2021-02-10 18:30:18 Java开发

处理FixedThreadPool中的背压

如何使用线程池处理Java中的背压? 如何拒绝新任务,以便提交的任务不超过 N 个. N -是提交队列中允许的最大任务数,包括新的,正在运行的,暂停的(未完成)任务. 用例 用户提交运行一段时间的计算任务.有时,有太多用户同时提交任务.如果已经提交了 N 个任务,如何拒绝新任务. 换句话说,已提交的总数(未完成,已开始或未开始的任务)不能大于 N . 示例代码 ..

如何知道ES上的项目可以重新提交给ES的ExecutorService完成时间

我的Java应用程序可处理文件夹中的音乐文件,它旨在并行且独立地处理多个文件夹.为此,每个ExecutorService都将处理每个文件夹,该ExecutorService的最大池大小与计算机的CPU数量不匹配. 例如,如果我们有8个CPU的计算机,则(理论上)可以同时处理八个文件夹,如果我们有16个CPU的计算机,则可以同时处理16个文件夹.如果只有1个CPU,则将pool-size设置为 ..
发布时间:2020-11-02 01:44:36 Java开发

我应该在请求中创建executorService还是在Web应用程序中共享一个实例?

我正在向基于Jersey的Web服务添加新的端点.支持端点的逻辑需要对另一个服务进行10到50次调用.这些调用是独立的并且可以并行化,因此我在考虑使用执行程序服务在多个线程之间分配工作. 我想知道应该为每个请求实例化executorService还是在Web应用程序中共享一个executorService实例.在后一种情况下,我将如何确定它应运行的线程数? 解决方案 我想知道是否 ..
发布时间:2020-11-02 01:43:17 Java开发

针对消费者生产者使用ExecutorService和PipedReader/PipedWriter(或PipedInputStream/PipedOutputStream)的Java示例

我正在寻找一个简单的生产者-Java中的使用者实现,并且不想重新发明轮子 我找不到同时使用新的并发包和两个Piped类的示例 是否有一个同时使用 PipedInputStream 以及为此使用的新Java并发包? 是否有一种更好的方法,而无需将Piped类用于此类任务? 解决方案 对于您的任务,仅使用一个线程并在您从数据库中读取时使用BufferedOutputStrea ..

哪些操作取决于LinkedHashMap的容量?有可用的并发版本吗?

我正在使用 ConcurrentHashMap 作为我的数据结构,因为多个线程将同时读写它。但是我发现客户端代码也需要经常对其进行迭代。因此,我看了提供更好的迭代性能的LinkedHashMap类,并在其Java文档中找到了本节: 链接的哈希映射有两个影响其性能的参数: 初始容量和负载系数。精确地为 HashMap定义它们。但是请注意,与 HashMap相比,此类为初始容量选择过多的 ..
发布时间:2020-10-18 00:24:17 Java开发

不安全的compareAndSwapInt与同步

我发现几乎所有高级同步抽象(例如Semaphore,CountDownLatch,java.util.concurrent中的Exchanger)和并发集合都使用Unsafe中的方法(例如compareAndSwapInt方法)来定义关键部分。同时,我希望同步块或方法将用于此目的。 您能解释一下不安全的方法(我的意思是仅能原子设置值的方法)比同步更有效,为什么这样做呢? 解决方案 如果您 ..
发布时间:2020-10-07 21:35:10 Java开发

执行大量任务的最佳实践

下面的代码在循环中创建了大量可运行的对象,即使只有5个踏步也可以在那里处理任务。有什么办法可以使内存中仅存在5个可运行对象,而不是任务总数(100000)。 ExecutorService执行程序= Executors.newFixedThreadPool(5); for(int i = 0; i ..
发布时间:2020-10-07 21:14:42 Java开发

Java中是否有BlockingMap作为BlockingQueue?

我想拥有一个与BlockingQueue非常相似的BlockingMap数据结构。 BlockingQueue的take方法将在那里等待,直到元素可用。我希望BlockingMap的get方法在那里等待,直到相应的键可用为止?我可以使用这种数据结构吗? 解决方案 我只是使用了 BlockingQueue> 过去。但是最近,我遇到了 Java的阻塞地图。不过 ..
发布时间:2020-10-07 20:31:26 Java开发