问题标签 [java.util.concurrent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1054 浏览

java - java中具有动态参与方数量的障碍

我想要一个在java中具有动态数量的参与者的障碍。我遇到了Phaser,但这个解决方案适用于我无法使用的 java 7。

java 6是否有一些解决方案。我应该如何满足具有可变数量服务员的障碍的需求?

0 投票
1 回答
122 浏览

java - 哪些 java.util.concurrent 类可以让我组织我的读/写?

假设我有一些想要同步访问的资源。大多数这些访问都是只读的。我想一次允许尽可能多的只读访问系统可以处理。但是,我希望能够停止阅读,进行一些写入,然后再次允许阅读。

所以读取线程可能看起来像这样

任何数量的线程都可以同时执行此操作,这不是问题。

写线程看起来像这样:

现在,我正在使用ReentrantLock既可读取又可写入的 a 。但显然,当我宁愿它们同时工作时,这会导致读取按顺序工作。

我能做些什么来解决这个问题?

这似乎被称为读者-作者问题,wiki 条目列出了一些 C 实现,但没有用于 Java。

编辑:我对任何可以完成工作的 Java 库持开放态度。标题说 java.util.concurrent 是因为答案似乎很可能就在那儿。

0 投票
1 回答
396 浏览

java - OpenJDK 的 LinkedBlockingQueue 实现:Node 类和 GC

我对 OpenJDK 的 LinkedBlockingQueue 实现(在 java.util.concurrent 中)中的 Node 类的结构有点困惑。

我已经复制了以下节点类的描述:

具体来说,我对 next 的第二个选择感到困惑(“这个节点,意思是后继者是 head.next”)。

这似乎与 dequeue 方法直接相关,如下所示:

所以我们移除了当前的 head,我们将它的 next 设置为它自己以“帮助 GC”。

这对 GC 有什么帮助?对 GC 有多大帮助?

0 投票
3 回答
3882 浏览

java - 使用 Executor 创建 ScheduledThreadPoolExecutor

我对为什么以下演员表不起作用感到非常困惑:

ScheduledThreadPoolExecutor 实现了 ScheduledExecutorService。如果我不能将它与实际类一起使用,那么这个 Executors 调用的意义何在。

我用错了吗(可能),有人可以提供一些指导吗?

0 投票
3 回答
1959 浏览

java - ThreadPoolExecutor 如何中断空闲线程?

刚翻了一下源码ThreadPoolExecutor发现一旦时间达到keepAliveTime的设定值并且allowCoreThreadTimeOut为true就会中断所有空闲的worker。

对我来说有点奇怪,它只能在 runState >= SHUTDOWN 时调用中断方法:

下面的代码来自getTask().ThreadPoolExecutor

这是否意味着所有空闲线程只能在 runState >= SHUTDOWN(SHUTDOWN、STOP 或 TERMINATED)时被中断?也就是说当状态为RUNNING时它们不会被中断。

0 投票
1 回答
4392 浏览

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

我正在寻找一个简单的生产者 - Java 中的消费者实现,并且不想重新发明轮子

我找不到同时使用新并发包和管道类的示例

是否有同时使用PipedInputStream和新的 Java 并发包的示例?

有没有更好的方法不使用管道类来完成这样的任务?

0 投票
5 回答
7776 浏览

java - 如何“取消”CountDownLatch?

我有多个消费者线程正在等待CountDownLatch大小为 1 的await(). 我有一个生产者线程,countDown()它在成功完成时调用。

当没有错误时,这很有效。

但是,如果生产者检测到错误,我希望它能够向消费者线程发出错误信号。理想情况下,我可以让生产者调用类似的东西,abortCountDown()并让所有消费者收到 InterruptedException 或其他一些异常。我不想调用countDown(),因为这需要我的所有消费者线程在调用await(). 我宁愿他们只收到一个他们已经知道如何处理的异常。

我知道中止设施在CountDownLatch. 是否有另一个同步原语可以轻松适应以有效创建CountDownLatch支持中止倒计时的同步原语?

0 投票
5 回答
1810 浏览

java - Java:记录 FutureTask 异常

我有一个应用程序,它定期提交要在专用线程中执行的任务。这些任务FutureTask<V>和线程只不过是一个无限循环,当它们进入队列时执行作业,如果为空则进入睡眠状态。

有时我需要等待计算的结果,所以我调用 FutureTask 的 get() 方法,如果发生不好的事情也会抛出异常。但是在某些情况下,我不在乎结果是什么,如果有的话,但是我需要知道(log、printStackTrace() 或其他什么...)在任务执行期间是否出现某种故障。

有什么方法可以实现这一点而不必等待我不需要的 get() ?

提前致谢!

更新:如果没有其他人等待结果,在执行任务后在运行线程上调用 get() 似乎是捕获异常的唯一方法。

另一种解决方案是扩展 FutureTask 类以提供一种方法,该方法通过 java 反射公开 sync.exception 私有字段。

0 投票
5 回答
4657 浏览

java - 并发 hashmap size() 方法复杂度

我想知道size()调用的方法是否与通常的 HashMap 方法ConcurrentHashMap具有相同的复杂性。size()

0 投票
3 回答
502 浏览

java - Java.util.concurrent 库是否比标准 Android AsyncTask 更擅长执行任何类型的任务

我意识到您可以获得更多的自定义,但是使用并发库类是否比仅使用库存 AsyncTask 或仅创建线程并调用运行有性能(内存/速度)优势?