• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    .NET Windows 多线程thread编程
    进程:工厂搬砖头,10个工人搬完1000个砖头
    线程:每个工人,搬完100个砖头,就是一个任务
    采用线程,异步搬:
    手工去搬,10个工人同时搬,效率高,异步执行,如果不采用线程,等第一个人搬完后第二个人才搬,那就慢了

    什么时候不能用线程
    如果要用小车来搬,只有一个小车,那么,在这样的情况下,就不应该用线程,因为只有一个小车,各个线程都在争夺和等待这个小车,所以不能用线程。如果这个时候还要用线程,则导致资源浪费,
    因为每个线程都有自己的资源,如包工头(CPU)同一时间要管理这10个工人,而只有一个工人实际在做事。
    线程的销毁:在销毁的时候需要考虑一些问题,比如搬砖头时,你不可能在一个工人搬到一半的时候,你将他销毁,那砖头往哪放呢?

    1..net里使用线程
    .net里使用线程,用thread类,定义线程,启动,销毁,全部包括在这个类里定义一个线程,必须指定这个线程的函数,也就是这个线程是做什么的,搬砖头呢还是挑水
    EG:
    复制代码 代码如下:

    Thread t = new Thread( new ThreadStart( st.WorkerMethod ) );
    t.Start ();
    public void WorkerMethod()
    {
    Console.WriteLine ("AA ");
    }

    2.如果使用带有参数的线程
    线程本身是不能带参数的,只能在类里定义一个全局变量,线程前先给这个变量赋值,然后在线程的函数里,去使用这个变量,以达到传参数的目的
    EG:
    复制代码 代码如下:

    public class SimpleThread
    {
    private string procParameter = "";
    public SimpleThread (string strPara)
    {
    procParameter = strPara;
    }
    public void WorkerMethod()
    {
    Console.WriteLine ("参数输入为: " + procParameter);
    }
    }
    class MainClass
    {
    /// summary>
    /// 应用程序的主入口点。
    /// /summary>
    [STAThread]
    static void Main(string[] args)
    {
    SimpleThread st = new SimpleThread("这是参数字符串!");
    Thread t = new Thread( new ThreadStart( st.WorkerMethod ) );
    t.Start ();
    t.Join (Timeout.Infinite);
    }
    }

    3.线程和委托
    委托的目的:类似C++的指钟,就是要把函数当做参数来传递
    4.应用程序域
    10个工人各自搬各自的,隔离开,不相互受影响,一个人抱怨不搬了,不影响其他人,电脑里也是一样的情况,各个应用程序间不能干扰,程序间不能访问,并且一个程序死了,整个电脑部能死机。
    5.线程池
    就如内存,如果工人搬砖头,突然有2个工人因为什么原因不能搬了,那么从线程池里调用其他线程来做,性能好,创建一个线程需要浪费时间和资源
    6.异步调用
    调用WebService为例
    同步:调用一个WebService时,调用完了,才执行下面的代码,如果在调用的时候,阻塞了,那么就要等待很久
    异步调用:调用WebService,代码继续往下执行,WebService执行完了后,再传回到接收器对象。
    7.多线程的应用,利用线程排序
    排序1000个数,如果一个线程排,需要1000毫秒
    如果10个线程排,则只需要大概100毫秒
    当然,排序的时候a[i] a[i+1],同时只能有一个线程对他进行操作
    所以,在For里面,i和i+1交换的时候,需要事先进行锁定。
    复制代码 代码如下:

    for (int t = 0; t x; t++)//X为线程数
    {
    Thread thread = new Thread(new ThreadStart(Sort));//Sort排序的方法
    thread.Name = Convert.ToString(t);
    thread.Start();
    }
    public void Sort()
    {
    try
    {
    while (true)
    {
    swaped = false;
    for (int j = 0; j valueArray.Length - 1; j++)
    {
    lock (typeof(Thread))//锁定
    {
    if (valueArray[j] > valueArray[j + 1])
    {
    int T = valueArray[j];
    valueArray[j] = valueArray[j + 1];
    valueArray[j + 1] = T;
    swaped = true;
    }
    }
    }
    Thread.Sleep(1);
    if (!swaped) { break; }
    }
    Thread.CurrentThread.Abort();
    }
    catch (Exception ex)
    {
    if (Interlocked.Increment(ref threadCounter) == Convert.ToInt64(ddlThreadNum.SelectedItem.ToString().ToString().Trim()))
    Display();
    }
    }
    您可能感兴趣的文章:
    • C#(asp.net)多线程用法示例(可用于同时处理多个任务)
    • .NET Framework中定时器timer的单线程与多线程使用讲解
    • .net面向对象之多线程(Multithreading)及 多线程高级应用
    • 使用.Net实现多线程经验总结
    • 一些.NET对多线程异常处理技巧分享
    • asp.net 计划任务管理程序实现,多线程任务加载
    • c#.net多线程编程教学——线程同步
    • ASP.NET:一段比较经典的多线程学习代码
    • .Net多线程编程(误用点分析)
    上一篇:ASP.NET获取真正的客户端IP地址的6种方法
    下一篇:ASP.NET Session对象保持会话使用说明
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    .NET Windows 多线程thread编程 .NET,Windows,多,线程,thread,