java.util.concurrent相关内容
我需要在Clojure程序中实现无限操作.我希望语法对于Java程序员也相当合理: (defn- my-operation (future (while @continue (do things) (Thread/sleep polling-time))) 这正是我想要的,它在另一个线程中进行操作,因此它不会阻塞主线
..
我正在使用invokeAll()来调用线程列表. AFAIK invokeAll()仅在所有线程完成其任务时返回. ExecutorService threadExecutor = Executors.newFixedThreadPool(getThreadSize()); List> future = w_threadExecutor.invokeAll(th
..
让我们考虑以下代码: 客户代码: public class MyClient { private final MyClientSideService myClientSideService; public MyClient(MyClientSideService myClientSideService) { this.myClientSideServi
..
我需要一张具有以下要求的地图: 它应该是高度并发的.多个线程可以同时调用put(),get()和remove()方法. 它应该是固定大小.如果HashMap的大小达到最大值(例如10000),则不应在地图上添加新条目.不能是LRU高速缓存,其中最早的条目在达到最大大小时会被删除. ConcurrentHashMap可以满足#1.但是,不确定如何在ConcurrentHashMap
..
我有一个来自GUI问题的用例,我想提交给您. 用例 我有一个GUI,它根据用户在GUI中设置的某些参数显示计算结果.例如,当用户移动滑块时,会触发多个事件,所有这些事件都会触发新的计算.当用户将滑块值从A调整为B时,会触发数十个事件. 但是计算可能需要花费几秒钟的时间,而滑块调整会每隔100毫秒触发一次事件. 如何编写一个适当的线程来侦听这些事件,并对其进行过滤,以便重新绘
..
在《 Java Concurrency in Practice》一书中,Brian Goetz说,传递给类的构造函数和方法的对象不归类所有.是因为他们来自外面,而班级却无法控制他们吗? 他继续说,如果显式设计了一种方法来转移传入的对象的所有权(例如,同步集合包装器工厂方法),则这是一个例外.有人可以举一个例子,并向我解释如何将其视为例外吗? 解决方案 例外是 List
..
从Java文档开始, ForkJoinPool与其他类型的ExecutorService的不同之处主要在于采用了工作窃取:池中的所有线程都试图查找并执行由其他活动任务创建的子任务(如果不存在,则最终阻塞等待工作). 当大多数任务产生其他子任务时(这与大多数ForkJoinTasks一样),这可以实现高效处理.在构造函数中将asyncMode设置为true时,ForkJoinPools也
..
AtomicBoolean将其值存储在: private volatile int value; 然后,例如,提取其值是这样的: public final boolean get() { return value != 0; } 其背后的原因是什么?为什么不使用boolean? 解决方案 AFAIK,int是可在不同机器类型上实现的最小CAS操作类型.
..
我想使用ConcurrentHashMap来让一个线程定期从地图中删除某些项目,而让其他线程同时从地图中删除项目. 我正在删除线程中使用map.entrySet().removeIf(lambda).我想知道我可以对其行为做出什么样的假设.我可以看到removeIf方法使用迭代器来遍历映射中的元素,检查给定条件,然后根据需要使用iterator.remove()将其删除. 文档提供了有
..
我知道这个问题以前已经被问过很多次,但是我只是想不通互联网上的例子,例如这两种解决方案都在put()方法中检查阻塞队列的数组/队列/链表是否为notifyAll等待线程,反之亦然.第二个链接中的评论强调了这种情况,并指出这是不必要的. 问题是;检查队列是否为空对我来说似乎也有些奇怪.通知所有正在等待的线程.有什么想法吗? 谢谢. 解决方案 到目前为止,我知道这是一个老问题,但是
..
我有一个工作单元流程,可以将它们称为“工作项",这些工作项是按顺序处理的(现在).我想通过多线程工作来加快处理速度. 约束:这些工作项按特定顺序排列,在处理过程中该顺序无关紧要-但是一旦处理完成,必须恢复该顺序. 类似这样的东西: |.| |.| |4| |3| |2|
..
有没有办法同步JavaFX Platform线程和标准Java线程?当前,当触发时,JavaFX线程会在标准Java线程完成将所有图像添加到可观察列表之前触发,因此imageList会更新为空白集合. private final TilePane imageList; final File[] files = new File(dir).listFiles(); final List
..
当我致电Future.cancel()时如何确保我的任务对中断有反应? ExecutorService executor = Executors.newSingleThreadExecutor(); Future future = executor.submit(task); try { future.get(timeout, timeoutUnit); } ca
..
我在以下链接中正在阅读CyclicBarrier http://java-latte.blogspot.in/2013/10/cyclicbarrier- in-java-concurrency.html . 在示例1 CyclicRaceDemo.java主要方法中,无需调用 reset 方法即可重用CyclicBarrier. 我运行了该示例,它运行良好.因此,我想知道reset方
..
我试图运行以下类,使其终止而不执行CompletableFuture. public class ThenApplyExample { public static void main(String[] args) throws Exception { //ExecutorService es = Executors.newCachedThreadPool(); Comple
..
在Java中拥有多个线程池的优点和缺点是什么?我已经看过代码,其中有多个线程池用于不同的“类型"任务,并且我不确定是更好的设计还是只是开发人员感到懒惰.一个示例是使用 ScheduledThreadPoolExecutor 定期执行的任务或具有超时的任务,并使用其他ThreadPoolExecutor进行其他所有操作. 解决方案 拥有单独的专用线程池的目的是,使活动不会因线程不足而被饥饿,
..
适应性旋转技术是Java 6在改善固有锁性能方面的四个主要变化之一.自适应旋转到底是什么?它是自旋锁和互斥锁的组合吗?有人能以一种易于理解的方式解释该策略的有效性吗?默认情况下,此策略可从JDK6开始使用. 解决方案 什么是自适应旋转? 要引用此 Java 6性能页面: 自适应旋转是一种优化技术,其中线程尝试进行竞争的同步进入操作时使用了两阶段旋转然后阻止策略.此技术使线程
..
我在多线程应用程序中使用过Java Executor,但是我似乎无法弄清楚何时最好使用以下每种方式: 1. ExecutorService executor=Executors.newFixedThreadPool(50); executor.execute(new A_Runner(... some parameter ...)); executor.shutdown(); whil
..
以上是OCP 7 java se书的屏幕打印.第791页. 我的问题是,是否每次在方法中创建一个新的ReentrantLock对象并将其锁定,如何阻止两个线程在lock和unlock之间运行代码块?这两个线程不会分别创建一个ReentrantLock对象并将其锁定吗?我可以想象,如果lock对象是仅实例化一次且从未更改的实例变量,它将如何工作. (最好是final). 我误会了吗?
..
阅读有关java.util.concurrent.locks.Condition接口的Java 8文档,给出以下示例: class BoundedBuffer { final Lock lock = new ReentrantLock(); final Condition notFull = lock.newCondition(); final Condition no
..