小编rad*_*pet的帖子

具有并行度= 1的串行和并行执行之间的差异

请提供给我参考,为什么使用Java Stream API的以下两个析因实现之间的执行时间会有显着差异:

  1. 串行实施
  2. 在自定义派生连接池中执行的并行实现(使用Stream.parallel()),并行度设置为1

我的期望是接近执行时间,但是并行版本的速度提高了2倍。我没有运行任何专门的基准测试,但是即使在冷启动的jvm中,执行时间也不应有太大差异。在下面,我附上两个实现的源代码:

public class FastFactorialSupplier implements FactorialSupplier {
  private final ExecutorService executorService;

  public FastFactorialSupplier(ExecutorService executorService) {
      this.executorService = executorService;
  }

  @Override
  public BigInteger get(long k) {
      try {
          return executorService
                  .submit(
                          () -> LongStream.range(2, k + 1)
                                  .parallel()
                                  .mapToObj(BigInteger::valueOf)
                                  .reduce(BigInteger.ONE, (current, factSoFar) -> factSoFar.multiply(current))
                  )
                  .get();
      } catch (InterruptedException | ExecutionException e) {
          e.printStackTrace();
      }

      return BigInteger.ZERO;
  }
}
Run Code Online (Sandbox Code Playgroud)
public class MathUtils {

  public static BigInteger factorial(long k) {
      return LongStream.range(2, k + 1) …
Run Code Online (Sandbox Code Playgroud)

java multithreading java-stream

10
推荐指数
1
解决办法
201
查看次数

@InjectMocks后为空

我在使用JUnit进行单元测试时遇到了一些麻烦.

考虑以下代码:

这是我要测试的类中的dependacy注入,我们称之为Controller.

@Inject private FastPowering fastPowering;  
Run Code Online (Sandbox Code Playgroud)

这是单元测试:

@RunWith(MockitoJUnitRunner.class)
public class ControllerTest {

@Mock
FastPowering fastPower;

@InjectMocks
Controller controller;

@Test
public void test() {
    assertEquals(
            (controller.computeAnswer(new BigDecimal(2), 2)).longValue(),
            (long) Math.pow(2, 2));
    }
}
Run Code Online (Sandbox Code Playgroud)

似乎fastPower为null,请解释如何解决这个问题.空指针异常,因为在.computeAnswer方法中调用了@injected字段(fastPower)

编辑:

解决了我应该读过@Mock和@Spy之间的区别......

null mocking inject mockito

7
推荐指数
2
解决办法
1万
查看次数

标签 统计

inject ×1

java ×1

java-stream ×1

mocking ×1

mockito ×1

multithreading ×1

null ×1