java_66666 2018-07-31 10:25 采纳率: 0%
浏览 829
已结题

java线程池工作使用问题和疑问

创建一个线程池

ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 10, 5, TimeUnit.SECONDS, new SynchronousQueue<>(),new MyThreadFactory("wangjg"));

再创建一个线程

Runnable myRunnable = new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                    System.out.println(Thread.currentThread().getName() + " run");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        };

再将线程提交到线程池中

Future<?> submit = executor.submit(myRunnable);

问几个问题:
1、在线程执行完成后jvm进程任然还在,指到shutdown后才会停止,那么后面再需要使用线程池又必须重新new一个了,是这样的吗?
2、和第一个类似,在日常开发工作中,线程池是通用一个的,还是各自开发自己new一个线程池,如果是共用的,那么什么时候执行shutdown?

  • 写回答

6条回答 默认 最新

  • qq_38535182 2018-07-31 10:26
    关注

    一般线程池都会有一个线程池管理类,里面有作用不同的线程池,然后提供线程池的建立以及获取。然后通过这个来获取具体的线程池来进行任务的执行

    评论
  • whs_321 2018-07-31 10:32
    关注

    shutdown一般是整个程序执行完毕的时候调用. 可以用一个线程池执行不同功能的Runable.

    评论
  • _zming 2018-07-31 10:37
    关注

    shutdown()只是阻止继续提交run任务,shutdownNow()才是真正关闭线程池(停止线程池所有线程),具体线程池该何时关闭,这个得看你应用
    ,如果你只是临时要执行一堆run任务,有没就不用线程池了,那么执行完任务就可以把线程池关闭,如果你应用经常需要线程池那就不用关闭,比如tomcat就维护了一个线程池用来处理客户端连接请求,除非你关闭tomcat,否则线程池始终保持可运行状态

    评论
  • _zming 2018-07-31 10:42
    关注

    线程池可以共用,处理A类型的任务可以和处理B类型的任务共用一个线程池,但如果A类型任务耗时总是很长,B耗时短,那么这两种类型任务最好各自创建
    线程池。不然A类型任务长时间占用线程池导致B得不到机会执行

    评论
  • 道不虚行只在人 2018-07-31 15:35
    关注
    1. 既然后面要再使用,你为什么还要shutdown呢?如果一直用,线城池完全可以不关。
    2. 共用还是单独使用要看具体情况,比如有两段代码都要使用线城池,其中一段代码被执行的次数非常多(你可以认为访问量很大), 那么另一段代码被执行的机会就会很小很小,这种情况你可以各自建一个线城池,用来隔离相互之间的影响
    评论
  • 蔴牛 2018-08-09 08:28
    关注

    一楼正解,通常一个线程池是执行同一类任务的,会有专门的线程池管理类,来负责线程池的生命周期,至于什么时候shutdown,没有规定,
    提示,shutdown只是说明不接受新任务,旧的线程仍然在跑,跑完了才关闭线程池;shutdownNow才是直接关闭线程池。

    评论

报告相同问题?

悬赏问题

  • ¥15 activity升级到flowable工作流act_ge_bytearray的草稿json数据复制到act_de_model 的model_editor_json的脚本
  • ¥15 cvi使用CreateThread创建线程时,出现存储空间不足无法处理此命令的错误
  • ¥15 求苹果推信imessage批量推信技术
  • ¥15 ubuntu 22.04 系统盘空间不足。隐藏的docker空间占用?(相关搜索:移动硬盘|管理系统)
  • ¥15 利用加权最小二乘法求亚马逊各类商品的价格指标?怎么求?
  • ¥15 c++ word自动化,为什么可用接口是空的?
  • ¥15 Matlab计算100000*100000的矩阵运算问题:
  • ¥50 VB6.0如何识别粘连的不规则的数字图片验证码
  • ¥16 需要完整的这份订单所有的代码,可以加钱
  • ¥30 写一个带界面控制的机房电脑一键开机关机并且实时监控的软件