小编Jac*_*ack的帖子

抛出NullPointerException,无法抛出它

我在一段不能抛出它的代码中得到一个NullPointerException.我开始考虑在JRE中发现一个错误.我使用javac 1.8.0_51作为编译器,问题发生在jre 1.8.0_45和最新的1.8.0_60.

抛出异常的行在一个循环内部,它在一个闭包lambda函数内.我们在spark 1.4中运行这样的关闭.这条线执行了1-2百万次,我得到的错误不是确定性的,使用相同的输入,每3或4次运行一次.

我在这里粘贴相关的代码:

        JavaRDD .... mapValues(iterable -> {
                LocalDate[] dates = ...
                long[] dateDifferences = ...

                final double[] fooArray = new double[dates.length];
                final double[] barArray = new double[dates.length];
                for (Item item : iterable) {
                    final LocalDate myTime = item.getMyTime();
                    final int largerIndex = ...
                    if (largerIndex == 0) {
                        ...
                    } else if (largerIndex >= dates.length - 1) {
                        ...
                    } else {
                        final LocalDate largerDate = dates[largerIndex];
                        final long daysBetween = ...
                        if (daysBetween == 0) …
Run Code Online (Sandbox Code Playgroud)

java lambda nullpointerexception apache-spark

13
推荐指数
1
解决办法
563
查看次数

我可以隐藏 PHP 警告:未定义的数组键而不抑制所有其他警告吗?

因此,看起来他们改变了访问具有未知密钥的数组会引发消息的方式。

<?php
if($myArray['foo']) { ... }
Run Code Online (Sandbox Code Playgroud)

25 年来,这只是发出一个通知,人们很乐意保持E_NOTICE沉默php.ini。对于(我认为)PhP 8.0,这现在引发了一个警告。

出于显而易见的原因,我不想保持沉默E_WARNING,所以我(以及世界上所有其他多年来使用未初始化变量的人,因为它们的值很简单null,就像在许多其他解释语言中一样)正在寻找一种可能的方法来摆脱与未定义的变量/数组/键相关的警告,同时报告所有其他(更严重的)编程错误,例如包含不存在的文件。

这个问题背后的原因是我必须处理大量用上述模式编写的代码;我只是无法全部重写,但我仍然需要切换到 PhP 8,所以不,我不是问如何使用isset().

php error-handling warnings isset

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

ExecutorService 动态扩展线程数

我有一个工作单元列表,我想并行处理它们。每个单元工作时间为 8-15 秒,完全计算时间,无 I/O 阻塞。我想要实现的是ExecutorService

  • 当没有工作要做时实例化零个线程
  • 如果需要,可以动态扩展到 20 个线程
  • 允许我一次添加所有工作单位(不阻止提交)

就像是:

Queue<WorkResult> queue = new ConcurrentLinkedDeque<>();
ExecutorService service = ....
for(WorkUnit unit : list) {
    service.submit(() -> {
        .. do some work ..
        queue.offer(result);
    );
}
while(queue.peek() != null) {
    ... process results while they arrive ...
}
Run Code Online (Sandbox Code Playgroud)

我尝试但没有成功的是:

  • 使用 anewCachedThreadPool()创建了太多线程
  • 然后我使用了它的内部调用new ThreadPoolExecutor(0, 20, 60L, SECONDS, new SynchronousQueue<>()),但后来我注意到由于同步队列,submit() 被阻塞
  • 所以我用过new LinkedBlockingQueue(),只是为了发现 ThreadPoolExecutor 只生成一个线程

我确信有官方的实现来处理这个非常基本的并发用例。有人可以建议吗?

java multithreading java.util.concurrent

4
推荐指数
1
解决办法
3991
查看次数

如何在输出控制台中阻止 Apache Ignite 消息“可能太长的 JVM 暂停”?

在调试时,我被这些消息淹没了。更一般地说,这是我在开发环境中不想要的东西,虽然在产品中拥有它很好。

如何禁用此类消息传递?

2021-10-13 10:11:48.973  WARN 5072 --- [detector-worker] org.apache.ignite.internal.IgniteKernal  : Possible too long JVM pause: 1121 milliseconds.
2021-10-13 10:11:50.501  WARN 5072 --- [detector-worker] org.apache.ignite.internal.IgniteKernal  : Possible too long JVM pause: 1479 milliseconds.
Run Code Online (Sandbox Code Playgroud)

java logging ignite

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