问题标签 [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 投票
5 回答
6854 浏览

java - ReentrantLock#tryLock(long,TimeUnit) 在尝试获取锁时在做什么?

ReentrantLock#tryLock(long,TimeUnit) 实现在尝试获取锁时在做什么?假设线程 A 确实拥有锁myLock,线程 B 调用myLock.tryLock(10,SECONDS),线程 B 是在休眠还是在等待?

换句话说,是这两种实现的区别:

1.

2.

0 投票
4 回答
1115 浏览

java - java.util.concurrent.LinkedBlockingQueue 中的奇怪代码

全部!

我在 LinkedBlockingQueue 中发现了奇怪的代码:

谁能解释一下为什么我们需要局部变量 h?它对 GC 有什么帮助?

0 投票
3 回答
6631 浏览

java - 带有 wait() 和 notify() 的 ConcurrentLinkedQueue

我不精通多线程。我试图通过一个生产者线程重复截取屏幕截图,该线程将BufferedImage对象添加到ConcurrentLinkedQueue并且消费者线程将poll排队等待BufferedImage对象以将它们保存在文件中。我可以通过重复轮询(while 循环)来使用它们,但我不知道如何使用notify()and来使用它们wait()。我曾尝试在较小的程序中使用wait()and notify,但无法在此处实现。

我有以下代码:

以前我有一个重复的轮询来检查BufferedImage对象的存在。现在我改变了run方法 assynchronised并尝试实现wait()and notify()。我做得对吗?请帮忙。谢谢。

0 投票
2 回答
2607 浏览

java - 获取计划任务的结果

我正在尝试学习 java 并发 API,对于我的练习,我想安排一个作业每隔 X 秒定期运行一次。该作业将计算一个随机数。

我想在计划任务完成后立即获得结果。我无法仅使用 API 完成此操作,所以我破解了它。

有没有办法在不使用低级机制的情况下做得更好?我希望能够删除同步MyRandomGiverTask.getResult(),而是使用类似ScheduledFuture.get(). 但在我的代码中,ScheduledFuture 从未完成/完成。这是我目前的解决方案:

0 投票
4 回答
8065 浏览

java - java重用一个执行器

我在一个模拟系统上工作,在每个时间步,我必须模拟许多模型。我使用了 FixedThreadPool 来加快计算速度:

现在,执行器execute()在调用shutdown(). 有没有办法重置执行器,所以我可以在下一个模拟步骤重用现有的执行器(及其线程)?

0 投票
3 回答
266 浏览

java - 在java中处理并发数据插入的类

将始终有 500 多个线程同时将唯一对象上传到存储桶。

在这种情况下,我应该使用哪个数据结构/类来在 java 中实现存储桶。

供参考:

我尝试使用 ArrayList、Vector、ConcurrentHashMap、ArrayBlockingQueue、LinkedBlockingQueue。

ArrayList 失败,因为它不是线程安全的。Vector 会消耗更多的插入时间。(因为获得监视器锁定的等待时间很长)

...最后,我使用了 ArrayBlockingQueue,这听起来很适合比较其他人。

如果这种情况下存在任何其他好的类/数据结构,请建议我。

0 投票
2 回答
5798 浏览

java - 在 ForkJoinPool 任务/操作中处理未捕获异常的更好方法

ForkJoinPool使用提交任务(RecursiveAction或)时处理异常(未捕获)的更好方法是什么RecursiveTask

ForkJoinPoolThread.UncaughtExceptionHandler在 WorkerThread 突然终止时接受 a 来处理异常(这无论如何都不受我们的控制),但是在ForkJoinTask抛出异常时不使用此处理程序。我在我的实现中使用标准submit/invokeAll方式。

这是我的场景:

我有一个线程在无限循环中运行,从第 3 方系统读取数据。在此线程中,我将任务提交给ForkJoinPool

我正在使用 RecursiveAction,在少数情况下使用 RecursiveTask。这些任务使用submit()方法提交给 FJPool。我想要一个通用的异常处理程序,类似于UncaughtExceptionHandler如果任务抛出未经检查/未捕获的异常,我可以处理异常并在需要时重新提交任务。处理异常还可以确保如果一个/一些任务抛出异常,排队的任务不会被取消。

invokeAll()方法返回一组 ForkJoinTasks 但这些任务在递归块中(每个任务调用该compute()方法并且可以进一步拆分 [假设场景])

我注意到当 3-4 个任务失败时,整个队列提交单元被丢弃。目前我已经放了一个try/catch我个人不喜欢的围绕 processTask 。我正在寻找更通用的。

  1. 我还想知道所有失败的任务列表,以便我可以重新提交它们
  2. 当任务抛出异常时,线程是否会从池中被逐出(尽管我的分析发现它们没有 [但不确定])?
  3. 在 FutureTask 上调用get()方法更有可能让我的流程按顺序等待,直到任务完成。
  4. 我只想知道任务失败的状态。我不在乎它什么时候完成(显然不想等一个小时后)

任何想法如何处理上述场景中的异常?

0 投票
1 回答
533 浏览

java - Thread.setUncaughtExceptionHandler 不起作用

我设置了线程的 uncaughtExceptionHandler ,如下面的代码所示,但是当在运行的线程中引发 HibernateException 时,它不起作用。我的 jvm 是 1.6.0_26。有什么线索吗?

0 投票
4 回答
349 浏览

java - ArrayBlockingQueue:应该用来创建Pool?

我正在尝试创建一个Pool对象来保留旧对象以防再次使用它们(以避免实例化新对象)。我用谷歌搜索,ArrayBlockingQueue有些人用它来创建Pool. 但是有一个问题我不知道:当一个对象插入它时,它是否会重新创建一个新实例。

例如:ArrayBlockingQueue<Integer> pool = new ArrayBlockingQueue<Integer>(3);

短时间后:pool = (3,4,5);

所以,我想知道将 6 分配给旧的 Integer 对象(值为 5),还是 Java 创建一个新对象并将其值分配为 6?

谢谢 :)

0 投票
4 回答
1730 浏览

java - Java中实现需要恒定时间才能完成的可调用对象的最佳方法是什么

为了防止密码暴力破解,并防止试图检测有效用户名的计时攻击,我希望我的登录过程花费恒定的时间,无论身份验证是否成功。简而言之,无论结果如何,我总是希望我的登录过程花费 1000 毫秒(假设任一结果都需要一小部分时间)。在 Java 中完成此任务的最佳方法是什么?这是我目前的想法: