zoukankan      html  css  js  c++  java
  • 多线程总结

    一,为什么要用多线程?

    一个进程至少有一个线程,使用多线程可以让一个进程同时处理多件事情。

    多线程可用在以下场合:

    1.      网络socket通信;

    2.      执行占用大量时间的操作;

    3.      用户界面响应用户操作,由后台来执行任务等。

    二,无参多线程的使用

    Thread thread = new Thread(new ThreadStart(SayHello));

         thread.Start();

    1.      new一个线程时需要传委托ThreadStart,此委托无返回值无参数;

    2.      Start()方法是告诉操作系统此线程已准备就绪,而并非真的开始执行,具体什么时候执行是靠操作系统来分配的。

    三,有参多线程的使用

    Thread thread = new Thread(new ParameterizedThreadStart(SayHi));

         thread.Start("Tom");

    1.      new一个线程时需要传委托ParameterizedThreadStart,无返回值,参数类型为object

    2.      要传递的参数用Start()方法传进去。

    四,怎么样传递多个参数?

    由于ParameterizedThreadStart委托传递参数类型为object,所以可以通过传递数组或泛型集合等来传递多个参数,如:

    List<string>list = new List<string>();

         list.Add("Tom");

         list.Add("Jony");

         list.Add("HanMeiMei");

        Thread thread = newThread(new ParameterizedThreadStart(SayHi));

         thread.Start(list);

    五,线程的常用属性与方法

    1.      当前线程:

    Thread.CurrentThread

    2.       线程ID,线程的唯一标识:

    thread.ManagedThreadId

     

    3.      线程休眠,静态方法,单位为ms

    Thread.Sleep(3000);

    4.       终止线程:

    thread.Abort();

    5.      线程优先级,值为一枚举值,此属性作用是建议操作系统设置成此优先级。

    thread.Priority = ThreadPriority.Highest;

    六,前台线程与后台线程

    1.      设置方法:

    thread.IsBackground= true;

    设置为true是后台线程,为false为前台线程;

    2.      前台线程与后台线程的区别:

    前台线程:只有当所有的前台线程都关闭,程序才关闭。

    后台线程:若所有前台线程都关闭,则后台线程也会自动关闭。

    七,线程同步,解决多方法重入问题

    1.      Lock锁来实现线程同步:

    Person per = new Person();

                lock(per)

                {

                    //要执行代码

                    foreach(String str in(List<string>)list)

                    {

                        Console.WriteLine(str+ ",how are you?");

                    }

                    Thread.Sleep(3000);

                    Console.WriteLine("线?¨¬IDêo{0}"Thread.CurrentThread.ManagedThreadId);

                }

    将要执行的代码锁住,则解决多方法重入时共享资源的协调的问题。

    八,解决Winform中无法在一个线程中控制另一个线程创建的控件的问题

    1.      关闭C#的检查功能:

    Contorl.CheckForIllegalCrossThreadCalls=false;

    2.      使用Invoke()方法。

  • 相关阅读:
    现代3D图形编程学习-关于本书
    极简单之爬虫入门
    前端学HTTP之网络基础
    用canvas 实现个图片三角化(LOW POLY)效果
    移动前端—图片压缩上传实践
    nodejs实现Websocket的数据接收发送
    nodejs学习之实现简易路由
    nodejs学习之实现http数据转发
    canvas粒子demo
    nodejs简易实现一下bigpipe
  • 原文地址:https://www.cnblogs.com/jietian331/p/3005768.html
Copyright © 2011-2022 走看看