代码拉取完成,页面将自动刷新
package objectpool
import (
"container/list"
"reflect"
"sync"
)
// 初始化一批对象, 当被剩余对象为0时 ,自动再一次性初始化 一批
type ObjectPool struct {
objects *list.List
typ reflect.Type
maxSize int
mux *sync.Mutex
}
// p 类型
func NewObjectPool(p reflect.Type,max_count int) *ObjectPool {
pool:=&ObjectPool{objects:list.New(),typ:p,maxSize:max_count}
pool.mux = &sync.Mutex{}
pool.initObject(max_count)
return pool
}
// 生成对象
func (this *ObjectPool) initObject(num int) {
now_len:=this.objects.Len()
diff:=num - now_len
if diff>0{
for i:=0;i<diff;i++{
v:=reflect.Zero(this.typ)
o:=v.Interface()
this.objects.PushBack(o)
}
}
}
// 获取对象
func (this *ObjectPool) Get() interface{} {
now_len:=this.objects.Len()
if now_len ==0{
this.initObject(this.maxSize)
}
e:=this.objects.Front()
this.objects.Remove(e)
return e.Value
}
// 获取加锁,速度有影响,适合多个线程获取对象
// 如果同时只有一个线程,使用Get()方法
func (this *ObjectPool) GetSafe() interface{} {
this.mux.Lock()
defer this.mux.Unlock()
now_len:=this.objects.Len()
if now_len ==0{
this.initObject(this.maxSize)
}
e:=this.objects.Front()
this.objects.Remove(e)
return e.Value
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。