对象池避免多个线程访问到同一个对象,避免一个进程内出现了多个对象。
例如: private void btnRandomStart_Click(object sender, RoutedEventArgs e)
{
Thread thread = ThreadSessionFactory.GetCurrentThreadSession(StartRandom); //从对象池获取对象,确定对象在线程内唯一
---------------------------------------------
这里如果改为Thread thread = new Thread(StartRandom);
你分析一下,我点一下这个按钮,让他开始执行,他就创建了一个对象,然后thread.Start()。
再点一下,我就让他停止执行, 那么他又创建了一个对象,这个新对象没有初始化也没有状态,那么它就又执行了thread.Start()
是不是这个线程就又创建了一个线程... 它每次都是创建一个新的对象,所以不能把当前线程的thread给停止掉
如果使用了对象池,那么我再次点击的时候,它拿到的是上次点击时候创建的对象,然后继续对那个对象进行操作
-----------------------------------------------
if (isStart == false)
{
isStart = true;
if (thread.ThreadState == ThreadState.Suspended) //判断thread的状态
{
thread.Resume(); //继续已挂起的线程
}
else
{
lock (thread)
{
thread.Start(); //启动这个线程
}
}
//thread.Start();
this.btnRandomStart.Content = "停止";
}
else
{
isStart = false;
//thread.Abort();
lock (thread)
{
thread.Suspend(); //挂起线程
}
this.btnRandomStart.Content = "开始随机点名";
} |