请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,您看下,这里的守护线程有必要设置吗,还有就是线程池里面呢套线程池这样好吗

具体代码图片,老师您看下
图片描述
这里开启了一个线程池,线程数是通过Runtime获取的。
图片描述
图片描述
这里的话新建了一个线程类,extends Thread。
图片描述
图片描述
这里调用了这个类的初始化方法,设置了这个子线程为守护线程,然后启动了这个线程。这里是具体的Run方法逻辑,
图片描述
图片描述
这里就是for循环,最终往队列里面塞任务,上面那个开启的子线程的run方法就是while条件判断stop!=true或者队列不为空的话,一直执行,不退出!
图片描述
这里依然和上面是一整块逻辑,都是在当前线程池的线程处理的逻辑,除了上面StoreService这个线程类(单独起了一个子线程)

问题?

  1. 老师我感觉这里这个StoreService这个子线程的run方法的逻辑是不断处理当前线程池的这个线程for循环的时候往queue里面放东西,子线程while条件判断,只要队列不为空,就一直处理,不退出,具体逻辑就是上传avro文件到hdfs上,搞不懂他这里为啥要设置成守护线程,感觉没啥用!
  2. 上面的逻辑都是在这个线程池处理的,然后这个方法里面,还有个小方法,就是将数据入库到hbase + solr上,它里面又搞了一个线程池。
  3. 图片描述
    这样线程池里面套线程池,而且还不断开启一个新的子线程去处理异步任务这样是不是性能开销挺大的和内存占用,老师您能给分析吗

正在回答

1回答

  1. 设置成守护线程,我认为不是必要的。

  2. 线程池套线程池,是可以的,毕竟写入数据库的速度比较慢,开启子线程的开销倒没那么大的。

0 回复 有任何疑惑可以回复我~
  • 提问者 奶茶三兄弟d #1
    谢谢老师解答,我理解就是这边基本都是需要异步处理,然后他这边基本上都是线程池处理,然后里面再开子线程,毕竟同步的话,响应时间太长了
    回复 有任何疑惑可以回复我~ 2020-09-22 20:28:27
  • 悟空 回复 提问者 奶茶三兄弟d #2
    对的,所以他这样处理是可以的
    回复 有任何疑惑可以回复我~ 2020-09-22 20:29:49
  • 提问者 奶茶三兄弟d #3
    老师,这边有什么隐患嘛,或者其他问题什么的,您能说说嘛
    回复 有任何疑惑可以回复我~ 2020-09-22 20:31:06
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信