美文网首页
在线程池中寻找堆栈

在线程池中寻找堆栈

作者: 12点前睡觉hhh | 来源:发表于2019-06-01 12:47 被阅读0次

首先看一个简单的案例,代码如下

public class FindStackDemo {
    public static void main(String[] args) {
        ExecutorService es = Executors.newFixedThreadPool(5);
        for (int i=0;i<5;i++){
            int finalI = i;
            es.submit(()->{
                System.out.println(100/ finalI);
            });
        }
    }
}

结果如下:



本来应该有5个结果,但是却只得到了4个,这是由于当i取0时,100/0抛异常,所以没有打印结果,但是程序没有任何日志显示。
线程池很有可能会“吃”掉程序抛出的异常,导致我们对错误一无所知。
向线程池讨回异常的方法:
一是放弃使用submit方法,改用execute方法。
代码如下

public class FindStackDemo {
    public static void main(String[] args) {
        ExecutorService es = Executors.newFixedThreadPool(5);
        for (int i=0;i<5;i++){
            int finalI = i;
            es.execute(()->{
                System.out.println(100/ finalI);
            });
        }
    }
}

结果如下:


image.png

二是改造submit方法

public class FindStackDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService es = Executors.newFixedThreadPool(5);
        for (int i=0;i<5;i++){
            int finalI = i;
            Future re = es.submit(() -> {
                System.out.println(100 / finalI);
            });
            re.get();
        }
    }
}

结果如下:


image.png

相关文章

  • 在线程池中寻找堆栈

    如果在提交给线程池的任务中抛出了异常,这个异常可能不会打印任何内容,也没有被任何人捕获,形成一个幽灵异常。 为了避...

  • 在线程池中寻找堆栈

    首先看一个简单的案例,代码如下 结果如下: 本来应该有5个结果,但是却只得到了4个,这是由于当i取0时,100/0...

  • 线程数量设定的考虑

    我们已经知道了线程池中的最大线程数量应该被限制,才不会导致系统资源耗尽。这些系统资源包括了内存(堆栈)、打开的文件...

  • 线程池几个重要参数

    corePoolSize 线程池中常驻线程核心线程数 maximumPoolSize 线程池中同时容纳可执行的线程...

  • Java线程堆栈

    线程堆栈信息以及解决的问题 1、线程堆栈的信息都包含: 线程的名字,ID,线程的数量等。 线程的运行状态,锁的状态...

  • Android线程池 ThreadPoolExecutor

    一.ThreadPoolExecutor的构造方法 corePoolSize 程池中的核心线程数,也就是是线程池中...

  • xcode调试之LLDB调试

    1.常用 @import 框架UIKit等 bt 打印当前线程堆栈 bt all 打印所有线程堆栈 up 向上查看...

  • HttpClients中https设置超时无效的问题

    使用多线程https请求数据时,发现一段时间所有线程都锁住了,使用线程堆栈工具发现线程都锁住,堆栈信息如下 打了很...

  • 线程池

    线程饥饿:多任务混合在同一池中,如果出现互相影响的状况出现类似死锁的问题。 例如:在一个线程池中,开辟两个线程,执...

  • 查看JVM信息的命令

    1. jstack 获取线程堆栈信息 打印堆栈信息到标准输出 jstack PID 打印堆栈信息到标准输出,会打印...

网友评论

      本文标题:在线程池中寻找堆栈

      本文链接:https://www.haomeiwen.com/subject/avawtctx.html