java.util.concurrent相关内容
我一直在使用 CompletableFuture.allOf(...)助手来创建汇总期货,这些期货只有在其复合期货被标记为完成时才会“完成”,即: CompletableFuture future1 = new CompletableFuture(); CompletableFuture future2 = new CompletableFuture(); Co
..
第一个线程正在用对象连续填充集合。第二个线程需要遍历这些对象,但不会更改集合。 当前,我使用 Collection.synchronized 使其具有线程安全性,但是有快速的方法吗? 更新 很简单:只要按下鼠标按钮,第一个线程(ui)就会连续将鼠标位置写入ArrayList。第二个线程(渲染)根据列表绘制一条线。 解决方案 即使同步列表,也不一定是线程-safe进行迭代,
..
我正在阅读有关以下内容的Java官方 doc 包装器实现,它们是 Collections 中的静态方法,用于获取同步的集合,例如: List list = Collections.synchronizedList(new ArrayList()); ... 我不明白的是以下内容(我引用java doc): 以这种方式创建的集合通常像通常一样是线程安全的同步
..
由于回答在线程和原子变量之间发生之前是断言不成立,因此我需要一个替代方法执行.线程1和线程2分别更新整数t1和t2.一旦更新,则不会对t1或t2进行其他任何更新.分配给t1和t2的值来自一个公共计数器,该计数器在每次分配后都会递增.我需要确保以下断言是正确的; int cnt=0; ReentrantLock lock = new ReentrantLock(); volatile Inte
..
假设一个AtomicInteger c在两个线程(线程1和线程2)之间共享. Thread1使用c.incrementAndGet()设置(仅一次)易失性变量t1. Thread2使用c.incrementAndGet()设置(仅一次)易失变量t2.一旦设置了t1和t2,就不会再由其他任何线程对其进行设置.假设线程1设置t1之后,它检查t2的值并获取null.是否保证随后将t2设置为比t1更高的值
..
当返回值不重要时, AtomicInteger.incrementAndGet() 方法,如果忽略返回值? 我正在考虑这样的差异,例如哪些差异更常见,以及哪些将使CPU高速缓存中的负载变得更少,或者进行其他任何事情,实际上可以帮助决定比投掷硬币更合理地使用哪一个. 解决方案 由于未给出实际问题的答案,因此,我基于其他答案(感谢,支持)和Java约定得出我的个人看法: incre
..
我正在尝试了解ForkJoinPool框架,并遇到以下示例: public class ArrayCounter extends RecursiveTask { int[] array; int threshold = 100_000; int start; int end; public ArrayCounter(int[] array, int start
..
Java 8引入了获取并发Set实现的新方法 // Pre-Java-8 way to create a concurrent set Set oldStyle = Collections.newSetFromMap(new ConcurrentHashMap()); // New method in Java 8 Set newStyle = Concu
..
我试图了解Java 8中的CompletableFuture如何与 Java内存模型.在我看来,出于程序员的理智,以下理想情况下应该成立: 完成CompletableFuture 发生之前任何完成依赖阶段的线程中的动作被执行 注册完成的线程中的操作创建了一个依赖阶段 happen-before 执行了 completion 依赖阶段 java.util.concurrent中有一条注
..
我正在ConcurrentSkipListSet上使用DescendingIterator方法.我刚刚检查了文档并注意到以下评论: “升序视图及其迭代器比降序视图更快." 请参见 https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListSet.html#descendingIter
..
我听说Java 8提供了许多有关并发计算的实用程序.因此,我想知道并行化给定for循环的最简单方法是什么? public static void main(String[] args) { Set servers = getServers(); Map serverData = new ConcurrentHashMap()
..
这是java.util.concurrent.CountedCompleter类(JDK 1.8.0_25)的代码片段. /** * If the pending count is nonzero, decrements the count; * otherwise invokes {@link #onCompletion(CountedCompleter)} * and then s
..
当取消 ForkJoinPool .给出以下示例代码: ForkJoinPool pool = new ForkJoinPool(); Future fut = pool.submit(new Callable() { @Override public Void call() throws Exception { while (true) {
..
有两个代码段. 在第一个中,我们从任务中创建CompletableFuture,该任务总是会引发一些异常.然后,我们将“异常"方法应用于此未来,然后应用"theAccept"方法.我们不会将Accept方法返回的新的Future赋给任何变量.然后我们在原始将来调用"join".我们看到的是,已经调用了“异常"方法以及"thenAccept"方法.我们看到它是因为他们在输出中打印了适当的行.但
..
我的android应用程序中包含以下代码: / ** *在获取数据。 * / public void OnPointsFetch(ArrayList结果){ toggleLoader(false); this.shops =结果; if(activeFilter == Constants.POINTS_FILTER_AVAILABLE){
..
连续扫描一组目录以查找一组文件名过滤器. 对于每个到达的文件名过滤器,请处理该文件,然后对所有文件重复上述步骤 在jdk 1.5中为此可能推荐的设计是什么,可能使用java.concurrent.Executor和Future 解决方案 我已经对网络抓取工具执行了类似的任务.只需进行一些更改...这是对新发现的目录进行扫描的并发实现.由Executor框架中的线程池提供,它使用Que
..
我一直在浏览程序,该程序启动三个线程并打印它们的相应值,这样先执行T3,然后执行T1线程,最后执行T2线程.下面是程序. 我只是想知道你们是否可以帮助转换有关倒数锁存器的程序,因为我想使用这种机制来开发它,或者也可以通过对信号量进行计数来完成. 从此相关问题的答案: public class Test { static class Printer implements
..
我正在实现一个日志记录,其中多个线程可以写入一个List日志.最后一个线程应将List的内容写入文件.因此,最后写入List的线程应将List刷新到文件中.最好的方法是什么? 对于List,我只需要对多个作者和一个读者有效的并发类之一. 解决方案 对于我来说,简单的解决方案是实现Closeable,然后使用close方法进行刷新.
..
我正在尝试通过在Java中使用semaphores来实现生产者和消费者问题.问题是,当我启动两个线程(生产者和消费者)时,消费者不会启动,而生产者在缓冲区已满后会自行阻塞.我的意思是看起来只有一个线程以同步方式工作.因此,正如我提到的,我使用3个信号量,它们是空的,完整的和互斥的.这是最简单的代码; 生产者类别; import java.util.concurrent.Semaphor
..
这个超级简单的应用程序会打印"Hello",但不会完成.我绝对没有理由这么做. JavaDoc ,本节定稿,说 程序中不再引用且没有剩余线程的池将自动关闭. 显然没有引用 tpe,这意味着线程没有完成.但是我不明白为什么.有人可以解释吗? 在这种情况下,解决方案是在main的末尾调用shutdown(),但是我的实际应用更加复杂.新工作是在Runnable内部生成的,所以我不
..