栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Android中的新Thread(task).start()VS ThreadPoolExecutor.submit(task)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android中的新Thread(task).start()VS ThreadPoolExecutor.submit(task)

该答案假设您的任务很短

这样的模式是否比在代码中创建新的线程更好?

更好,但仍远非理想。您 仍在为短期任务创建线程 。相反,您只需要创建其他类型的线程池-例如by

Executors.newScheduledThreadPool(int corePoolSize)

行为上有什么区别?

  • A
    FixedThreadPool
    将始终具有一组要使用的线程,并且如果所有线程都忙,则将新任务放入队列。
  • ScheduledThreadPool
    Executors
    类创建的(默认)(即使空闲)具有 最小的 线程池。如果有新任务出现时所有线程都忙, 它将为它创建一个新线程 ,并在完成后60秒钟处理该线程,除非再次需要它。

第二个可以让您不要自己创建新线程。无需“预定”部分就可以实现此行为,但是您将不得不自己构造执行程序。构造函数是

public ThreadPoolExecutor(int corePoolSize,    int maximumPoolSize,    long keepAliveTime,    TimeUnit unit,    BlockingQueue<Runnable> workQueue)

各种选项使您可以微调行为。

如果有些任务很长…

我的意思是很长。与您的应用程序生命周期中的大部分时间一样(实时2路连接?服务器端口?多播侦听器?)。在这种情况下,将您

Runnable
的遗嘱执行人置于不利地位–标准的遗嘱执行人
并非 旨在应对这种情况,它们的性能将下降。

考虑一下您的固定线程池-如果您有5个长时间运行的任务,那么任何新任务都会产生一个新线程,从而完全破坏该池的所有可能收益。如果您使用更灵活的执行程序-
一些线程将被共享,但并非总是如此。

经验法则是

  • 如果 任务 ,请使用执行程序。
  • 如果 任务很长,请 确保您的执行程序可以处理它(即,它没有最大的池大小,或者没有足够的最大线程来处理多一个线程一段时间)
  • 如果这是一个需要始终与主线程一起运行的并行进程,请使用另一个线程。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508751.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号