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
    }
}

例子很简单,相信只要有些基础的都可以看懂。