首页 > TAG信息列表 > java-util-concurrent

java-正确编写ExecutorService.shutdownNow()可以停止的任务?

我有以下形式的处理循环 while (true) { doWork(); Thread.sleep(SLEEP_INTERVAL); } 我想用它制作一个可与ExecutorService一起很好地运行的Runnable,它将在调用ExecutorService.shutdownNow()时退出. 我正在寻找这样写: public WorkerTask implements Runnable { @

java-使用并发类并行处理目录中的文件

我试图弄清楚如何使用java.util.concurrent包中的类型来并行处理目录中所有文件的处理. 我熟悉Python中的多处理程序包,该程序包非常易于使用,因此理想情况下,我正在寻找类似的东西: public interface FictionalFunctor<T>{ void handle(T arg); } public class FictionalThread

Java同步线程

不确定此D类线程是否正确.是否存在竞争条件,访问时是否应该处于同步块中?如果D是一个外部类,并且A实例已传递给D构造函数,该怎么办? class A { int i; void f() { i++; D d = new D(); d.start(); } class D extends Thread { publ

java-ConcurrentHashMap更新存在值线程安全

我想使用包含一些结果的并发哈希图, ConcurrentHashMap<Long,AtomicInteger> 如果键不存在,则添加一个新条目,或者按键和增量获取值,如下所示: if(map.contains(key)) map.get(key).addAndGet(1); else map.put(key,new AtomicInteger(1)); 放置操作不安全,该如何解决?放

java-使用布尔值进行同步

以下代码在并发访问List时是否是线程安全的? 挥发物合格在这里增加任何价值吗? class concurrentList{ private AtomicBoolean locked = new AtomicBoolean(true); volatile List<Integer> list=new LinkedList<Integer>(); long start = System.curren

java-线程安全的从集合中查找和删除对象

我不知道该如何做以下事情 class MyCollection<E> implements Collection<E> { @Nullable E findAndRemove(Predicate<E> predicate) { for (E e : this) { if (predicate.test(e)) { remove(e); return e;

ScheduleAtFixedRate不使用Future Java 8提供输出

在以下代码中,scheduleAtFixedRate会无限运行. 所以问题是: 为什么Java提供无限线程执行方案? Runnable task1 = () -> System.out.println("Hello Zoo"); Future<?> result = service1.scheduleAtFixedRate(task1, 8, 2, TimeUnit.SECONDS); System.out.println(result.get()); Sys

java-newCachedThreadPool如何缓存线程

根据Executor类中方法public static ExecutorService newCachedThreadPool()的注释: Threads that have not been used for sixty seconds are terminated and removed from the **cache**. 我想知道缓存在哪里以及它如何运行?因为我在ThreadPoolExecutor或它的超类中没有看到任何

Java的ExecutorService性能

我有一个主线程,它将作业分派到线程池.我正在使用Java的Executor框架. 从事件探查器(VirtualVM)中,我可以看到每个线程的活动:我可以看到主线程正在等待很多时间(因为执行者的队列有上限),这意味着执行者的队列在大多数时间都已满.但是,执行者的线程并不像我想象的那样忙.他们中大多

java-ExecutorService JVM不会终止

这个问题已经在这里有了答案:            >            Java ServiceExecutor terminating condition                                    4个 I don’t understand why I have to call executorService.shutdown()

java-OpenJDK的LinkedBlockingQueue实现:节点类和GC

这个问题已经在这里有了答案:            >            Strange code in java.util.concurrent.LinkedBlockingQueue                                    4个 OpenJDK的LinkedBlockingQueue实现(在java.util.concurre

java – 是否存在带有getAndWait()方法的HashMap?例如.一个BlockingConcurrentHashMap实现?

许多线程可能会填充HashMap,在某些情况下我需要等待(阻塞)直到HashMap中存在对象,例如: BlockingConcurrentHashMap map = new BlockingConcurrentHashMap(); Object x = map.getAndWait(key, 1000); //(object_to_get, max_delay_ms) 想知道这样的事情是否存在,我讨厌重新发明

java – 拥有比多个线程池更好的单线程池设计

在Java中拥有多个线程池有什么优缺点?我见过代码,其中有多个线程池用于不同的“类型”任务,我不确定它是更好的设计还是只是开发人员是懒惰的.一个例子是将ScheduledThreadPoolExecutor用于定期执行或超时的任务,并使用另一个ThreadPoolExecutor执行其他任务.解决方法:具有单独的专

java – ExecutorService.invokeAll不支持可运行任务的集合

想通过ExecutorService的invokeAll(..)方法运行Runnable任务的集合. 但是现在不支持(仅支持可调用任务的集合) 有什么具体的原因吗?做类似事情的替代方法是什么.解决方法:只需将runnable转换为callables: List<Callable<Void>> callables = new ArrayList<>(); for (Runnable r : ru

内存一致性 – 发生在Java之前的关系

参见英文答案 > How to understand happens-before consistent                                    4个 在阅读有关内存一致性错误的Java文档时.我找到了与两个创造事件相关的点 – 在关系之前: >当一个语句调用Thread.start()时,每个语句都有

如何正确使用Java Executor?

我在我的多线程应用程序中使用了Java Executors,但我似乎无法弄清楚何时最好使用以下各种方法: 1. ExecutorService executor=Executors.newFixedThreadPool(50); executor.execute(new A_Runner(... some parameter ...)); executor.shutdown(); while (!executor.isTerminated())

java – CompletableFuture没有被执行.如果我使用ExecutorService池按预期工作,但不使用默认的forkJoin公共池

我试图运行以下类,它终止而不执行CompletableFuture. public class ThenApplyExample { public static void main(String[] args) throws Exception { //ExecutorService es = Executors.newCachedThreadPool(); CompletableFuture<Student> studentCompletableFuture =

使用Java未来进行无限操作是错误的吗?

我需要在Clojure程序中实现无限操作.我希望Java程序员的语法也相当清晰: (defn- my-operation (future (while @continue (do things) (Thread/sleep polling-time))) 这给了我我想要的东西,在不同的线程中的操作,因此它不会阻止主要的,并且

如何懒惰地创建供Java线程池使用的任务

我正在用Java编写一个负载测试应用程序,并且有一个线程池可以对正在测试的服务器执行任务.因此,要创建1000个作业并在5个线程中运行它,我会执行以下操作: ExecutorService pool = Executors.newFixedThreadPool(5); List<Runnable> jobs = makeJobs(1000); for(Runnabl

java主线程管理启动其他线程

我会描述我的问题: >我正在开发异步模式下的文档生成(Office文档)应用程序,所以我使用Threads >由于性能限制,我必须同时启动2个线程,>为了在两个线程运行时不阻止用户启动文档生成,我想开发一个包含ArrayDeque对象作为线程堆栈的主线程,用户可以在其中添加创建请求(作为实现Collabl

java – 在磁盘上写入文件时锁定文件

我有两个独立的线程F1和F2(确切地说,两个java.util.concurrent.FutureTask实例)并行运行. F1进行一些处理,然后将结果复制到XML文件中.然后,它重复这些步骤,直到它无关(创建了许多XML文件). F2查看F1输出目录,取一个文件,解析它,并对其执行一些处理. 这非常有效,除了有时F2从文件中

Java并发对象池?

我尝试将外部非线程安全库集成到我的Web项目中;我发现为每个客户端线程创建此对象的实例太昂贵了. 因此,我想创建一个具有以下属性的对象池. >动态对象创建,动态创建池中的对象,而不是在构造函数中创建它们.池最初为空,当客户端线程获取资源对象时,池可以按需创建新资源.一旦创建的

java – AtomicBoolean.set(flag)和AtomicBoolean.compareAndSet(!flag,flag)有什么区别?

我想知道在调用之间是否存在任何差异(或可能的副作用): AtomicBoolean.set(true) 和 AtomicBoolean.compareAndset(false, true) AtomicBoolean #set的JavaDoc状态: Unconditionally sets to the given value. 而AtomicBoolean#compareAndSet指出: Atomically sets the value

java.util.concurrent.CompletionStage – 如何处理异常?

我正在尝试找到更好的方法来处理以下代码中的多个异常: public CompletionStage<Result> getRepositoryInfo(String repositoryOwner, String repositoryName) { return repositoryInfoService.getRepositoryInfo(repositoryOwner, repositoryName) .handle((repositoryInf

Java线程在处理结束时变慢

我有一个Java程序,它接收一个包含文本文件列表的文本文件,并分别处理每一行.为了加快处理速度,我使用带有24个线程的FixedThreadPool的ExecutorService来使用线程.该机器有24个内核和48GB内存. 我正在处理的文本文件有250万行.我发现,对于前230万行左右,在CPU利用率很高的情况下运