原创
1.Thread 多线程
Unity里一般用于Socket连接,开一条线程接消息。
2.Queue 队列
对象的先进先出集合,可以规定特定类型的队列集合,也可以什么类型都存入队列。
Queue aaa = new Queue(); Queue<int> aaa = new Queue<int>(); 都是可以的。
3.lock 关键字
主要用于处理并发问题、锁定独占对象。锁定的必须是引用类型!
先写一个线程类,不用继承MonoBehaviour。
public class XianCheng
{
public Thread ThreadOne;
public Thread ThreadTwo;
public Queue<int> queue = new Queue<int>(); //先进先出队列
public void StartXianCheng()
{
//线程1
ThreadOne = new Thread(Count); //线程开始方法
ThreadOne.IsBackground = true; //后台线程会随着主线程结束退出
//ThreadOne.Name = "Xiancheng1"; //线程名字
ThreadOne.Start(); //开始线程
//线程2
ThreadTwo = new Thread(Count);
ThreadTwo.Start();
}
public void Count()
{
//这里可以注释掉lock来测试
lock (queue) //锁定队列,必须等待一条线程访问完成后,别的线程才能使用
{
queue.Enqueue(1); //入队
// queue.Dequeue(); //出队,返回队列开始处的对象,并且删除它!
Thread.Sleep(1000); //线程休眠毫秒数
// ThreadOne.Suspend(); //暂停线程
// ThreadOne.Resume(); //继续线程
}
}
}
再写一个类,很简单。
public class NewBehaviourScript : MonoBehaviour {
XianCheng xiancheng;
void Start () {
xiancheng = new XianCheng();
xiancheng.StartXianCheng();
}
void Update () {
Debug.Log(xiancheng.queue.Count); //lock的话,打印先1后2,不lock直接2,因为两个线程同时使用了队列。
}
void OnApplicationQuit()
{
xiancheng.ThreadTwo.Abort(); //终止线程1
xiancheng.ThreadOne.Abort(); //终止线程2
}
}
例子很简单,一看就懂,写一堆功能看的烦的人,我看教程就喜欢代码少,注释的。