多线程常用语法

来源:互联网 发布:unity3d java服务器 编辑:程序博客网 时间:2024/06/05 04:33

想详细了解线程机制的可以看这篇文章:http://www.cnblogs.com/JimmyZheng/archive/2012/06/10/2543143.html

线程的定义构造函数有两种:


1.ThreadStart()
2.ParameterizedThreadStart()

ThreadStart 用于不带参数的并且无返回值的方法的抽象 ParameterThreadStart 是带object参数的方法的抽象

public class ThreadStartTest     {        //无参数的构造函数        Thread thread = new Thread(new ThreadStart(ThreadMethod));        //带有object参数的构造函数        Thread thread2 = new Thread(new ParameterizedThreadStart(ThreadMethodWithPara));        public ThreadStartTest()         {            //启动线程1            thread.Start();            //启动线程2            thread2.Start(new Parameter { paraName="Test" });        }        static void ThreadMethod()         {           //....        }        static void ThreadMethodWithPara(object o)         {            if (o is Parameter)             {               // (o as Parameter).paraName.............            }        }    }    public class Parameter     {        public string paraName { get; set; }    }


使得当前线程休眠(暂时停止执行millis毫秒)

thread.sleep(3000)


阻塞其他线程,自己执行

当NewThread调用Join方法的时候,MainThread就被停止执行,

直到NewThread线程执行完毕

thread.join()

多个线程依次执行例子:

 public static void ThreadJoin2()        {            IList<Thread> threads = new List<Thread>();            for (int i = 0; i < 3; i++)            {                Thread t = new Thread(                    new ThreadStart(                        () =>                        {                            for (int j = 0; j < 10; j++)                            {                                if (j == 0)                                    Console.WriteLine("我是线层{0}, 完成计数任务后我会把工作权交换给其他线程", Thread.CurrentThread.Name);                                else                                {                                    Console.WriteLine("我是线层{0}, 计数值:{1}", Thread.CurrentThread.Name, j);                                }                                Thread.Sleep(1000);                            }                        }));                t.Name = "线程" + i;                //将线程加入集合                threads.Add(t);            }            foreach (var thread in threads)            {                thread.Start();                //每次按次序阻塞调用次方法的线程                thread.Join();            }        }

释放并终止调用线程

Thread.Abort();

Interrupt 方法将当前的调用该方法的线程处于挂起状态和Abort方法不同的是,被挂起的线程可以唤醒

thread.Interrupt();

Suspend 和Resume方法很奥妙,前者将当前运行的线程挂起,后者能够恢复当钱被挂起的线程

Thread.CurrentThread.Suspend();

  thread.Resume();        

简单了解下Thread 的 一些常用的重要属性

CurrentThread

   获取到当前线程的对象

IsAlive

   判断线程是否处于激活状态

IsBackground

   设置该线程是否是后台线程,一旦设置true 的话,该线程就被标示为后台线程

再次强调下后台线程的终止不会导致进程的终止

IsThreadPoolThread

    只读属性标示该线程是否属于线程池的托管线程,一般我通过线程池创建的线程该属性都是true

Name

    获取到线程的名字,我们可以根据业务或者逻辑来自定义线程的名字

Priority

这个属性表示线程的优先级,我们可以用ThreadPriority这个枚举来设置这个属性

ThreadPriority包含有5个优先级大家了解下就行