`

应用线程池

阅读更多

应用线程池
一、任务与执行策略之间的隐性耦合。
1、有些类型的任务需要明确一个执行的策略,包括:
1)依赖的任务
2)使用线程限制的任务
3)对响应时间敏感的任务
4)使用ThreadLocal的任务
2、线程饥饿死锁(Thread starvation dead)
如果线程中一个任务依赖于其他任务的执行,就可能产生死锁。
3、耗时操作
解决方法:设置阻塞操作的超时时间,如Thread.join, BlockingQueue.put, CountDownLatch.await, Selector.select

二、设置线程池的大小
1、避免线程池的长度硬编码,需要考虑计算环境,资源预算和任务的自身特性
2、公式及定义

三、配置ThreadPoolExecutor
1、ThreadPoolExecutor为Executor提供基本的实现,可以通过它构造自己的Executor。
2、线程的创建与销毁,ThreadPoolExecutor的构造函数的几个参数:corePoolSize,maximumPoolSize,keepAliveTime
3、管理队列任务
ThreadPoolExecutor允许提供一个BlockingQueue来持有等待执行的任务。
任务排队的方式有三种: 无限队列,有限队列,同步移交
如何避免资源耗尽。
4、饱和策略
1)通过setRejectedExecutionHandler来修改ThreadPoolExecutor的饱和策略。
2)JDK提供了几种不同的RejectedExecutionHandler的实现,实现了不同的策略AbortPolicy,CallerRunsPolicy,DiscardPolicy,DiscardOldestPolicy
AbortPolicy :引起execute抛出未检查的RejectedExecutionException,调用者可以捕获这个异常,进行处理
DiscardPolicy:当新提交的任务不能进入队列等待执行的时候,discard会默认放弃这个任务。
DiscardOldestPolicy:策略选择丢弃的任务,放弃即将执行的任务,重新提交新任务。
CallerRunsPolicy:既不抛异常,也不抛弃任务。它把一些任务退回给调用者,以减缓任务流。
3)使用semaphore来抑制任务提交。
4)线程工厂ThreadFactory,接口只有一个方法newFactory
5、扩展ThreadPoolExecutor
1)提供几个函数让子类去重写 beforeExecute(),afterExecute(),terminate()
无论任务是从run()中返回,还是抛出异常,afterExecute都会被执行;
如果beforeExecute抛出一个runtimeException,任务将不被执行,afterExecute也不会被调用。
terminate 在线程池完成关闭后调用。
6、并行递归算法
1)顺序执行改为并行执行。
2)谜题框架

分享到:
评论

相关推荐

    Android-AppExecutor应用线程池可以指定任务的优先级完全kotlin

    "Android-AppExecutor应用线程池可以指定任务的优先级完全kotlin"这个主题主要涉及如何使用Kotlin构建一个定制的应用程序线程池,以便更好地控制任务执行的优先级和顺序。 首先,我们需要了解线程池的概念。线程池...

    多线程的应用线程池dsfdsf

    所谓线程池,即在进程启动时,同时生成一定数量的线程,把他们放入一个容器中,这样,当有需求时,从池中取出一个线程去处理请求,当池里的线程用完时,在有请求时则只能等待。

    线程池技术研究与应用

    在工作流引擎中应用线程池技术,可以极大地提升系统的响应速度和整体性能。例如,当有大量短暂的任务请求进入系统时,传统的处理方式可能导致大量的线程创建和销毁,消耗大量资源。而通过使用线程池,可以将这些任务...

    Python 应用之线程池.pdf

    在当前的IT运维领域,随着运维对象数量的激增,如何高效...然而,在构建和应用线程池时,也应当注意一些潜在的陷阱和注意事项,比如合理设定线程池的大小、处理好线程间的同步问题等,以确保线程池能够稳定高效地运行。

    线程池技术在并发服务器中的应用

    线程池技术在并发服务器中的应用 线程池技术是指在服务器程序中,预先创建一组线程,供客户端请求时使用,以减少创建和销毁线程的开销,提高系统的处理能力。这种技术可以最大程度地利用系统的资源,消除系统因频繁...

    线程池管理多线程上传

    线程池管理和多线程上传是并发编程中的一个重要实践,特别是在大数据传输和网络服务中。在Java等编程语言中,线程池通过有效地管理...通过分析和学习`threadpooltask`中的代码,开发者可以更好地理解和应用线程池技术。

    一个线程池封装类及例子程序

    线程池是多线程编程中的一个重要...通过研究这个封装类,我们可以了解到如何设计一个线程池类,以及如何在实际项目中应用线程池来优化程序性能。对于并发编程爱好者和专业开发者来说,这是一份非常有价值的参考资料。

    线程池技术研究与应用.pdf

    在工作流引擎中应用线程池,可以显著提升系统的响应速度和性能。工作流引擎通常处理复杂的业务流程,涉及多个步骤和并发操作,线程池可以有效地管理这些并发操作,确保系统的稳定性和效率。 总的来说,线程池技术是...

    线程池实现,通过C语言实现

    在给定的资源中,"200行C代码实现简单线程池.doc"可能包含了详细的设计和实现步骤,以及如何在实际项目中应用线程池的文档。而"threadpool.c"则是实际的C语言源代码文件,实现了线程池的核心功能。下面我们将探讨...

    android中线程池dmeo

    在Android开发中,线程池是一种管理线程资源的有效方式,它可以提高应用程序的性能和响应速度...通过分析和学习这个示例,开发者可以更好地理解如何在实际项目中应用线程池进行异步操作,从而提高应用的性能和响应性。

    c++ 多线程线程池 demo

    在C++编程中,多线程技术是一种提升程序性能的有效手段,特别是在处理大量并发任务时。线程池是多线程编程中一个重要的概念,它能够优化系统资源的...这有助于我们更好地理解和应用线程池,优化我们的C++多线程程序。

    德国人写的 线程池代码 for DelphiXE

    Examples 文件夹中可能包含了使用线程池的示例代码,这些示例有助于开发者理解和学习如何在自己的项目中应用线程池。通过查看这些例子,我们可以了解如何提交任务到线程池,如何等待所有任务完成,以及如何处理...

    android线程池

    本篇文章将深入探讨四种主要的线程池类型及其实现,旨在帮助开发者理解和应用线程池。 一、Executor框架 Java的Executor框架是线程池的核心,它定义了执行任务的基本接口。通过ExecutorService,我们可以提交任务...

    线程池技术在J2ME网络通信中的应用研究

    在J2ME环境中应用线程池技术,还需要考虑设备的特定限制。例如,J2ME设备通常具有较低的处理器能力和有限的内存空间,这要求线程池的设计必须更加精简高效: 1. **线程池大小的合理设定**:根据设备性能和预期并发...

    JAVA经典线程池源码

    本资源包含了一个经典的Java线程池实现,适用于大型项目,能帮助开发者理解并应用线程池技术。 线程池的概念源于操作系统中的进程池,其核心思想是减少创建和销毁线程的开销,通过复用已存在的线程来提高系统效率。...

    易语言线程池支持库源码

    这对于理解线程池的工作机制以及如何在实际项目中应用线程池至关重要。 "简单线程传各种参例子.e"可能是进一步的教程,讲解如何向线程传递不同类型的参数,这对于编写需要处理不同数据的并发任务尤其有用。易语言...

    VC线程池原理及实现方法

    ### VC线程池原理及实现方法 #### 一、引言 随着计算机网络技术的发展,服务器需要处理大量的并发请求,而传统的多线程方案在处理这些请求时面临着效率低下和...希望本文能够帮助开发者更好地理解和应用线程池技术。

    Linux C系统编程:使用线程池实现cp命令

    通过阅读和理解这段代码,开发者可以学习如何在实际项目中应用线程池技术。 线程池的性能优化也是一个重要的话题。例如,线程池大小的选择应根据系统资源和任务特性来调整,过多或过少的线程都可能导致性能下降。...

    c++写的线程池 附带测试数据,很不错

    开发者可以通过阅读代码来学习如何在实际项目中应用线程池,理解其内部工作原理和优化策略。测试数据则可以帮助验证线程池的正确性和性能。 总之,理解和掌握线程池的概念以及如何在C++中实现和使用线程池,对于...

Global site tag (gtag.js) - Google Analytics