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

原创


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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是重阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值