jjzjj

executorService

全部标签

java - 如何并行处理文件的行?

我想读取一个大文件,处理每一行并将结果插入数据库。我的目标是并行处理线条,因为每个过程都是一项长时间运行的任务。因此我希望一个线程继续读取,多个线程继续处理,一个线程继续插入block到db。我把它分解如下:1)按顺序逐行读取文件(简单)2)将每一行发送到线程池(3个线程),因为处理是长时间运行的任务。在线程池繁忙时阻止进一步的行读取。3)将每个处理过的行从每个theadpool写入StringBuffer4)监控缓冲区大小,并将结果以block的形式写入数据库(例如,每1000个条目)ExecutorServiceexecutor=Executors.newFixedThreadPo

java - ExecutorService.shutdownNow() 不关闭线程

我正在运行一个高度并发的Java程序。当许多线程向执行程序服务提交任务时,主线程会在某个时刻调用ExecutorService.shutdownNow()。执行此操作后,我希望:执行者服务不会接受额外的任务执行者服务的队列清晰其余运行的worker被中断,也就是说,如果他们正确管理InterruptedException和/或显式检查Thread.currentThread().isInterrupted()由于我处于以下情况:执行程序服务由于ExecutorService.shutdownNow()而“关闭”,但并未关闭,即ExecutorService.awaitTerminati

java - ScheduledExecutorService 多线程并行

我有兴趣使用ScheduledExecutorService在任务尚未完成时为任务生成多个线程。例如,我需要每0.5秒处理一个文件。第一个任务开始处理文件,如果第一个线程未完成,则在0.5秒后生成第二个线程并开始处理第二个文件,依此类推。这可以通过这样的方式完成:ScheduledExecutorServiceexecutor=Executors.newScheduledThreadPool(4)while(!executor.isShutdown()){executor.execute(task);try{Thread.sleep(500);}catch(InterruptedExc

java - 是否有类似于 ExecutorService invokeAll 的非阻塞方法?

Java的ExecutorService接口(interface)定义了一个名为invokeAll的方法,该方法接收要并发处理的Callable对象集合。但是,invokeAll方法本身会等待所有任务完成运行后再返回,这使其成为一种阻塞方法。在我的测试环境中,我不关心这些任务的返回值,我只需要它们并发运行。现在,我知道我可以手动创建新的Thread或Runnable对象并自己启动它们,但是如果我可以简单地创建一个Runnable或Callable对象并将它们传递给开始为我执行它们并立即返回的方法。有人知道现有的库类具有我所描述的方法吗?我在做一些研究时找不到。

java - 将 ThreadLocal 与 ExecutorService 一起使用是否危险?

我在下面的博客上介绍了ThreadLocals的概念:https://www.baeldung.com/java-threadlocal它说“不要将ThreadLocal与ExecutorService一起使用”它说明了以下使用ThreadLocals的示例。publicclassThreadLocalWithUserContextimplementsRunnable{privatestaticThreadLocaluserContext=newThreadLocal();privateIntegeruserId;privateUserRepositoryuserRepository=

java - 如何停止线程池中的线程

我正在编写一个生成多个并发任务的应用程序。我正在使用线程池来实现它。可能会发生一个事件,使任务中正在进行的计算无效。在那种情况下,我想停止当前正在运行的任务,并开始新的任务。我的问题:如何停止当前正在运行的任务?我实现的解决方案是存储对任务线程的引用,并在该线程上调用interrupt()。在演示代码中:publicclassTaskimplementsRunnable{privateStringname;privateThreadrunThread;publicTask(Stringname){super();this.name=name;}@Overridepublicvoidru

java - 带有参数的自定义 Guice 绑定(bind)注释

我已经成功地创建了一个Guice绑定(bind)注释来将单线程java.util.concurrent.ExecutorService实例注入(inject)到构造函数中。这是一个用法示例:publicclassContainsSingleThreadedExecutorService{privatefinalExecutorServiceexecutorService;@InjectpublicContainsSingleThreadedExecutorService(@SingleThreadedExecutorServiceexecutorService){this.execut

java - 停止提交给 ExecutorService 的 Runnable

我已经在我的Java应用程序中实现了订阅。添加新订阅者时,应用程序会创建新任务(实现Runnable的类以在单独的线程中运行)并将其添加到ExecutorService中,例如:publicvoidSubscribe(){es_.execute(newSubscriber(this,queueName,handler));}//...privateExecutorServicees_;应用程序可以注册任意数量的订阅者。现在我想实现类似Unsubscribe的东西,这样每个订阅者都可以停止消息流。在这里,我需要一种方法来停止在ExecutorService中运行的任务之一。但我不知道该怎

java - 使用 Executors 服务在 Java 中创建固定大小线程池的最佳方式

我正在使用Java中的Executors框架为多线程应用程序创建线程池,我有一个与性能相关的问题。我有一个可以在实时或非实时模式下工作的应用程序。如果是实时的,我只是使用以下内容:THREAD_POOL=Executors.newCachedThreadPool();但如果不是实时的,我希望能够控制线程池的大小。为此,我正在考虑2个选项,但我不太了解其中的区别,以及哪个会表现更好。选项1是使用简单的方法:THREAD_POOL=Executors.newFixedThreadPool(threadPoolSize);选项2是创建我自己的ThreadPoolExecutor,如下所示:R

java - tomcat 6线程池异步处理

简短的问题:在Tomcat6应用程序中-我如何运行(单独的)线程池?运行线程池的最佳解决方案是什么?长问题:我这里有一个简单的需求;轮询数据库以获取某些数据,同时允许Web客户端等待答案(长轮询连接)。当该数据在数据库中可用时,我会向相关客户发送回复。话虽如此,我宁愿目前不深入研究任何框架(quartzscheduler也许吧?)。因此,正如我得出的结论,我需要一个线程池来在后台完成这项工作。那么如果我要使用Thread(实际上是Runnable),哪个类可以组织这一切?有排序吗ThreadPool解决方案?有什么推荐吗? 最佳答案