PB版线程池多线程DEMO

DEMO运行

线程任务为:随机挂起0~2000ms后返回,执行100次
线程池参数:核线程8,最大线程16,任务队列256,开始运行
在这里插入图片描述
运行结束,用时约13秒
在这里插入图片描述

将线程池的核线程增加到32,再次运行
在这里插入图片描述
运行结束,用时约4秒
在这里插入图片描述

开发接口

n_thread_runnable:线程执行接口,类似Java中的Runnable
事件 init(any param):实现子线程初始化代码
事件 run(any param , ref any retMsg):实现子线程执行代码

n_thread_pool:线程池,类似Java中的线程池
属性 integer coreThreadNum:核线程数,默认8
属性 integer maxThreadNum:最大线程数,默认16
属性 long queueSize:任务队列容量,默认256
属性 string runnableObject:线程执行接口(n_thread_runnable)的实现类名,必须设置
属性 string prefix:子线程实例名前缀,非必须
属性 any initParam:子线程初始化代码(init事件)的入参,非必须
方法 run(any param):投递参数给线程池,线程池将自动地异步调用子线程执行代码(run事件)
方法 setObserver(powerObject o):设置线程池的消息接收对象,线程运行过程中自动回调
方法 getThreadCount():获取线程数量
方法 getRunningCount():获取正在运行的线程数量

消息接收对象:任意的powerObject,调用线程池的setObserver方法注册给线程池
事件 thread_begin(string instanceName , any param):线程开始运通知,参数 param 为子线程接口 run 事件的参数
事件 thread_end(string instanceName , any retMsg):线程结束运行通知,参数 retMsg 为子线程接口 run 事件的参数
事件 thread_error(string instanceName , string errMsg):线程运行抛出异常通知,参数 errMsg 为异常信息

源代码

发现BUG请留言或私信,以便修正(QQ:768310524 TEL:18649713925)
代码基于PB12.5版本编写,需要低版本可联系本人,欢迎技术交流

链接:https://pan.baidu.com/s/1FcC9txeLwFPh9V4Rvsi0cg
提取码:xhqw

注意事项: 1、主进程传入的对象或变量不管是不是ref线程内操作传入的引用都会影响主进程的对象或变量,且对象只能是nonvisualobject类型的。 2、基础变量如long等等都不能传引用ref会运行会报错 3、SharedObjectUnregister只是把SharedObjectDirectory中的去掉,实际内存不会释放必须destroy 4、主进程不能直接访问线程中的变量和对象,可以通过处理类私有的办法处理。 5、千万注意释放线程的时候一定要把线程里面的资源释放完,不然百分百卡死。比如一个线程里面有一个timing的计时器,如果不先stop(),直接destroy,百分百卡死。如果连接数据库或者其他接口时千万注意了!!!千万要在uf_stop()(此例中的释放预留方法)里面把所有的资源都释放干净,资源都释放干净,源都释放干净,都释放干净,释放干净,放干净,干净,净…… 大体设计思路: 1、在主进程中建立一个“任务信息类”数组,其中包含“任务线程类”,一个任务对应一个线程。 2、在主进程中建立一个“任务管理类”,负责处理任务信息类。 简单举例: 1、新建1个“任务管理类”,再新建N“任务信息类”,将“任务信息类”赋值完成加入“任务管理类”,并创建一个“任务线程类”,此时线程开始running。 2、“任务线程类”中有一个内部timing类,监控自己是否执行完成,会改标志。“任务管理类”也有一个timing监控“任务信息类”和“任务线程类”的情况,把完成的结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值