Unity3d Thread多线程,Queue队列,lock关键字

来源:互联网 发布:特德蒋 知乎 编辑:程序博客网 时间:2024/09/21 09:02

原创


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


例子很简单,一看就懂,写一堆功能看的烦的人,我看教程就喜欢代码少,注释的。

0 0
原创粉丝点击