jjzjj

Executor

全部标签

Java 并发实践 : race condition in BoundedExecutor?

在《Java并发实践》一书中,BoundedExecutor的实现有些奇怪。当有足够多的线程在执行器中排队或运行时,它应该通过阻塞提交线程来限制向执行器提交任务。这是实现(在catch子句中添加缺少的重新抛出之后):publicclassBoundedExecutor{privatefinalExecutorexec;privatefinalSemaphoresemaphore;publicBoundedExecutor(Executorexec,intbound){this.exec=exec;this.semaphore=newSemaphore(bound);}publicvoi

Java:为线程池中的线程设置超时

我想为在线程池中执行的线程设置超时。目前我有以下代码:ExecutorServiceexecutor=Executors.newFixedThreadPool(8);for(Listl:partition){Runnableworker=newWorkerThread(l);executor.execute(worker);}executor.shutdown();while(!executor.isTerminated()){}代码只是将一个大的对象列表拆分为子列表,并在单个线程中处理这些子列表。但这不是重点。我想给线程池中的每个线程一个超时时间。对于池中只有一个线程,我找到了以下解

java - 暂停 ScheduledExecutorService

我正在使用ScheduledExecutorService执行以固定速率调用服务的任务。服务可能会向任务返回一些数据。该任务将数据存储在队列中。一些其他线程慢慢地从队列中挑选项目importjava.util.concurrent.BlockingQueue;importjava.util.concurrent.LinkedBlockingQueue;importjava.util.concurrent.ScheduledExecutorService;importjava.util.concurrent.TimeUnit;publicclassEverlastingThreadimp

java - 在 Eclipse 中并行运行 JUnit 参数化测试

我想知道在定义参数化测试时是否可以以编程方式并行运行JUnit测试。我们的想法是能够像在Eclipse中运行常规JUnit测试一样运行它们。我当前的代码类似于:@RunWith(Parameterized.class)publicclassJUnitDivideClassTests{@ParameterspublicstaticCollectiondata(){returnArrays.asList(newObject[][]{{12,3,4},{12,2,6},{12,4,3}});}privateintn;privateintd;privateintq;publicJUnitDiv

java - 单线程任务而不排队进一步的请求

我要求任务异步执行,同时丢弃任何进一步的请求,直到任务完成。同步方法只是将任务排队,并不会跳过。我最初想使用SingleThreadExecutor但它也会对任务进行排队。然后我查看了ThreadPoolExecutor,但它读取队列以获取要执行的任务,因此将执行一个任务并且至少有一个任务排队(其他任务可以使用ThreadPoolExecutor.DiscardPolicy丢弃)。我唯一能想到的就是使用信号量来阻塞队列。我使用以下示例来展示我想要实现的目标。有更简单的方法吗?我错过了一些明显的东西吗?importjava.util.concurrent.*;publicclassThr

java - 执行者没有按预期处理任务

如果我运行持久任务,如果第一个任务没有完成,Executor永远不会启动新线程。有人可以帮助我了解为什么以及如何解决这个问题吗?importjava.util.concurrent.ExecutorService;importjava.util.concurrent.LinkedBlockingQueue;importjava.util.concurrent.ThreadPoolExecutor;importjava.util.concurrent.TimeUnit;importorg.junit.Test;publicclassTestExecutor{@Testpublicvoid

java - 当我在四核机器上使用多线程时,为什么这段代码看不到任何显着的性能提升?

我写了一些Java代码来学习更多关于Executor框架的知识。具体来说,我编写了代码来验证CollatzHypothesis-这表示如果您将以下函数迭代应用于任何整数,您最终会得到1:f(n)=((n%2)==0)?n/2:3*n+1CH仍未得到证实,我认为这是了解Executor的好方法。每个线程都分配了一个整数范围[l,u]来检查。具体来说,我的程序有3个参数-N(我要检查CH的数字)、RANGESIZE(线程必须处理的间隔的长度)和NTHREAD,线程池的大小。我的代码运行良好,但我看到的加速比我预期的要少得多——当我从1个线程变为4个线程时,加速大约为30%。我的逻辑是计算完

java - 如何继承 CompletableFuture?

我想继承CompletableFuture覆盖默认的Executor。也就是说,如果用户在未指定Executor的情况下调用方法,我希望使用我自己的Executor而不是CompletableFuture通常使用的那个>.Javadoc暗示了子类化的可能性:AllCompletionStagemethodsareimplementedindependentlyofotherpublicmethods,sothebehaviorofonemethodisnotimpactedbyoverridesofothersinsubclasses.如果底层实现依赖于像internalComplet

Java 计划执行器准确性

我在使用Java计划执行程序时遇到了一个特殊情况,想知道我遇到的情况是否正常。我需要安排以5秒的预定义速率执行的任务。预计这些任务的执行时间有时会超过5秒,但是当运行它们的时间低于5秒时,备份的任务列表应该快速连续运行以catch进度。运行任务时,了解最初计划的执行时间很重要(想想java.util.TimerTask中的scheduledExecutionTime())。最后,我需要跟踪计划时间和实际时间之间的差异,以确定日程何时“偏离”以及偏离了多少。到目前为止,我已经通过使用Java执行器实现了所有这些,下面的类说明了总体思路:publicclassExecutorTest{pu

在初始配置之后更改gitlab ci multirunner executor

我正在阅读GitlabCI多室内文档它可以通过如何设置GitlabCI多室内执行人来走动,但是我似乎找不到有关最初设置的执行程序(在DOCS中或在线搜索)的任何内容。这受支持吗?看答案配置写入/etc/gitlab-runner/config.toml您可以使用自己喜欢的编辑器进行编辑,然后您需要重新加载或重新启动RunnerService。这是文档对于Gitlab跑步者config.toml文件。