win10系统线程异常未处理怎么办 线程哪些情况会中断?
线程哪些情况会中断?
1.线程正常执行,正常结束。
2.监控某些条件并结束线程的不间断运行。
3.捕获InterruptedExc
Delphi线程中怎么抛出异常?
在D:。
线程。结束的
线程。等待
也就是先触发T:真
否则,an "无效句柄 "当WaitFor即将结束时将导致错误。当窗体关闭时,该方法将等待一个事件(因为等待)。
因此,如果我们不 t在主窗体中结束线程,我们不 不一定要使用WaitFor。相反,:使用下面的方法在关闭表单的代码中直接调用fr: Tru:。如果线程。在终止: some function设置时,尝试设置线程。在调用PcmThrd之前终止: nil。终止,以避免线程结束后某些函数中的变量出现空指针错误。当然,这不是绝对的,需要根据具体程序来确定。
线程池队列大小设置?
一、ThreadPoolExecutor的重要参数
CorePoolSize:核心线程的数量。核心线程会一直存活,没有任务要及时执行。当线程数小于核心线程数时,即使有空闲线程,线程池也会优先创建新线程进行处理。当allowCoreThreadTimeouttrue(默认为false)被设置时,核心线程将随着时间的推移而关闭。
QueueCapacity:任务队列容量(阻塞队列)
当核心线程的数量达到最大值时,新任务将排队等待执行。
MaxPoolSize:最大线程数
当线程数为gtcorePoolSize且任务队列已满时。线程池创建新的线程来处理任务。
当线程数为maxPoolSize且任务队列已满时,线程池将拒绝处理任务并抛出异常。KeepAliveTime:线程空闲时间
当线程的空闲时间达到keepAliveTime时,线程将退出,直到线程数达到corePoolSize。
如果allowCoreThreadTimeouttrue,它将一直等到线程数为0。
AllowCoreThreadTimeout:允许核心线程超时。
RejectedExecutionHandler:任务拒绝处理程序
拒绝处理任务有两种情况:
当线程数量达到maxPoolSize且队列已满时,新任务将被拒绝。
当线程池被调用shutdown()时,它将在关闭之前等待线程池中的任务完成。如果在调用shutdown()和线程池实际关闭之间提交了一个任务,新任务将被拒绝。
线程池将调用rejectedExecutionHandler来处理这个任务。如果默认值为AbortPolicy,将引发异常。
ThreadPoolExecutor类有几个内部实现类来处理这种情况:
AbortPolicy丢弃任务并引发运行时异常。
CallerRunsPolicy执行任务
DiscardPolicy忽略它,什么也不会发生。
DiscardOldestPolicy将首先进入队列(最后执行)的任务从队列中踢出。
实现RejectedExecutionHandler接口,可以自定义处理器。
二、ThreadPoolExecutor的执行顺序
线程池执行如下任务
(1)当线程数小于核心线程数时,创建线程。
(2)当线程数大于等于核心线程数且任务队列未满时,将任务放入任务队列。
(3)当线程数大于或等于核心线程数且任务队列已满时。
1)如果线程数小于最大线程数,则创建线程。
2)如果线程数等于最大线程数,抛出异常,拒绝任务。
第三,如何设置参数
系统默认值
核心池大小1
_值
_值
keepAliveTime60s
allowCoreThreadTimeoutfalse
rejectedExecutionHandlerAbortPolicy()
如何设置它
需要根据几个值来决定。
任务:每秒的任务数,假设为500~1000。
Taskcost:每个任务都需要时间,假设0.1s
Responsetime:系统允许的最大响应时间,假设为1s。
做一些计算
corePoolSize每秒需要处理多少线程?
线程计数taSks/(1/taskcost)任务* taskcout (500 ~ 1000) * 0.1 50 ~ 100线程。CorePoolSize设置应大于50。
根据8020原理,如果每秒80%的任务小于800,那么corePoolSize可以设置为80。
queueCapacity(核心大小池/任务成本)*响应时间
计算可用队列容量80/0.1*1 80。意味着队列中的线程可以等待1s,超过1s就需要新的线程来执行。
记住它可以 t设置为_VALUE,这样队列会非常大,线程数量只会保持在corePoolSize大小。当任务急剧增加时,没有新的线程可以打开执行,响应时间会急剧增加。
maxPoolSize(最大任务数)-队列容量)/(1/任务成本)
可以得到计算的maxPoolSize (1000-80)/10 92。
(最大任务数-队列容量)/每个线程每秒处理能力的最大线程数
RejectedExecutionHandler:根据具体情况,任务不重要可以丢弃,而重要的任务要通过一些缓冲机制来处理。
默认情况下,通常满足KeepAliveTime和allowCoreThreadTimeout。
以上都是理想值,要根据机器的性能来决定。如果在未达到最大线程数的情况下,机器的cpu负载已满,则需要通过升级硬件、优化代码、降低taskcost来处理。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。