0
点赞
收藏
分享

微信扫一扫

多线程常用语法


想详细了解线程机制的可以看这篇文章:

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

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个优先级大家了解下就行








举报

相关推荐

scss常用语法

Markdown常用语法

Jquery常用语法

postgre sql常用语法

python常用语法点

0 条评论