【已解决】 Thread.start() 去执行方法完毕后、需要像工作流一样去关闭吗
ConvertThread 继承 Thread 实现 run 方法
package com.wzf.document.base.utils;
import com.velcro.fileviewer.utils.FileViewerUtils;
import com.velcro.utils.HttpUtils;
public class ConvertThread extends Thread {
private String attachId;
public ConvertThread(String attachId) {
this.attachId = attachId;
}
@Override
public void run() {
System.out.println(" 附件转换 : " + attachId);
String convertUrl = FileViewerUtils.getConvertUrl(attachId);
System.out.println(convertUrl);
HttpUtils.getRemoteData(convertUrl);
}
}
在上传接口处调用一次 run() 方法、如下:

我有个问题就是 每次上传文件的时候它就 run 一次、是不是就启一条线程了,而且我是直接 return 的,没有进行杀死线程的操作,我这种写法是否存在问题,我担心内存泄漏啥的,本人小白一个 5555
当线程执行结束的时候,这个线程就已经销毁了,这种做法本身是没有任何错误的。那什么时候这个线程会一直存在着?当你这个线程内部实现了死循环,或者业务逻辑非常庞大很耗时,你Activity生命周期结束了任务还没结束,那这个时候这个线程就会造成内存泄漏。
再跟你讲讲下面的人的回复,为什么二楼会建议你使用线程池?第一,线程池方便对线程进行统一管理,线程池内部有对线程的优化,可以对空闲的线程进行复用,减少线程资源的损耗;第二,众所周知,线程是有自己的生命周期的,创建、调度、销毁等等,线程池直接省去了线程创建的操作,任务到了就执行,是不是比普通的new 线程对象要快一些?第三,有的时候你需要这个任务延时执行,初始化延时等等,线程池也提供了方式调用,还有任务队列满了的情况下的一些拒绝策略等等,线程池的好处很多很多。
总结起来,实现线程的方式很多,三楼也给你提供了方式,一句话,在熟悉度还可以的情况下,在合适的场景用合适的方式,学习一种东西的时候可以稍微了解下它的一些原理,表面理解也行,至少你能懂它在做什么,它能做什么
建议使用线程池
https://www.sunofbeach.net/a/1495382671976624130
这里有我总结的超简单的线程池用法 包会
几点建议:
在我意识内 这是封装好的 也没单独说要销毁操作 就应该是会自动回收销毁的 我刚刚百度了下也是会销毁 看看大佬们怎么说
感谢多位评论区大佬的解答,感谢感谢 [抱拳] ,最佳答案给了字最多的哥哥哈哈哈哈