linux下怎么在等待线程结束中设置超时

linux下怎么在等待线程结束中设置超时,第1张

线程退出有三种方式:(1)执行完成后隐式退出;(2)由线程本身显示调用pthread_exit函数退出;pthread_exit(void*retval)(3)被其他线程用pthread_cance函数终止:pthread_cance(pthread_tthread)用event来实现。在子线程中,在循环内检测event。while(!e.is_active()){}当退出循环体的时候,自然return返回。这样子线程会优雅的结束。注意:选用非等待的检测函数。pthread线程有两种状态,joinable(非分离)状态和detachable(分离)状态,默认为joinable。joinable:当线程函数自己返回退出或pthread_exit时都不会释放线程所用资源,包括栈,线程描述符等(有人说有8k多,未经验证)。detachable:线程结束时会自动释放资源。Linuxmanpagesaid:Whenajoinablethreadterminates,itsmemoryresources(threaddescriptorandstack)arenotdeallocateduntilanotherthreadperformspthread_joinonit.Therefore,pthread_joinmustbecalledonceforeachjoinablethreadcreatedtoavoidmemoryleaks.因此,joinable线程执行完后不使用pthread_join的话就会造成内存泄漏。解决法:1.//创建线程前设置PTHREAD_CREATE_DETACHED属性pthread_attr_tattrpthread_tthreadpthread_attr_init(&attr)pthread_attr_setdetachstat(&attr,PTHREAD_CREATE_DETACHED)pthread_create(&thread,&attr,&thread_function,NULL)pthread_attr_destroy(&attr)2.当线程为joinable时,使用pthread_join来获取线程返回值,并释放资源。3.当线程为joinable时,也可在线程中调用pthread_detach(pthread_self())来分离自己。

如果你是要在子线程超时后直接关闭的话可以这样:

exec=Executors.newFixedThreadPool(1)

Callable<String>call = new Callable<String>() {

public String call() throws Exception {

//开始 *** 作

//TimeTaskTest.star(null)

return "线程执行完成"

}

}

Future<String>future = exec.submit(call)

//设置为30分钟超时

future.get(1000*60*time , TimeUnit.MILLISECONDS)

=========================================

如果你是在进行其他 *** 作的话那就比较麻烦了,目前我想到的是在子线程中一直访问某个变量,超时时守护线程改变这个值,然后子线程读到后退出,不过这个有个问题,就是当子线程卡死在某个环节时完全无用

Hystrix所有的配置都是 hystrix.command.[HystrixCommandKey] 开头,其中 [HystrixCommandKey] 是可变的,默认是 default ,即 hystrix.command.default ;另外Hystrix内置了默认参数,如果没有配置Hystrix属性,默认参数就会被设置,其优先级:

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds 用来设置thread和semaphore两种隔离策略的超时时间,默认值是1000。

这个超时时间要根据 CommandKey 所对应的业务和服务器所能承受的负载来设置,要根据 CommandKey 业务的平均响应时间设置,一般是大于平均响应时间的 20%~100% ,最好是根据压力测试结果来评估,这个值设置太大,会导致线程不够用而会导致太多的任务被fallback;设置太小,一些特殊的慢业务失败率提升,甚至会造成这个业务一直无法成功,在重试机制存在的情况下,反而会加重后端服务压力。

这个值并非 TPS 、 QPS 、 RPS 等都是相对值,指的是1秒时间窗口内的事务/查询/请求, semaphore.maxConcurrentRequests 是一个绝对值,无时间窗口,相当于亚毫秒级的,指任意时间点允许的并发数。当请求达到或超过该设置值后,其其余就会被拒绝。默认值是100。

是否开启超时,默认是true,开启。

发生超时是是否中断线程,默认是true。

取消时是否中断线程,默认是false。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11330934.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存