普通无参数多线程

Thread t1 = new Thread(m.printOneToTen);
t1.Start();
t1.Join();

带参数多线程

  1. Start传参

    t1 = new Thread(m.printOneToX);
    t1.Start(10);//此处10为object类型进入,所以函数的参数也要是object类型
    
  2. 委托法传参

    t1 = new Thread(() => m.printOneToX(10));
    t1.Start();
    

多个线程共享对象

  1. Interlocked原子操作法(只能操作整数类变量)

  2. SemaphoreSlim类锁

    SemaphoreSlim splim = new SemaphoreSlim(2);//首先实例化一个SemaphoreSlim对象,向构造函数中传递的参数是允许最大线程访问数
    splim.Wait();//锁住资源
    //.....somecode......
    splim.Release();//释放锁
    
  3. ManualResetEventSlim类信号(一命令多)

    ManualResetEventSlim man = new ManualResetEventSlim(false);//false意为一开始是让线程Stand by的
    man.Wait();//等待信号
    man.Set();//发送信号,行动开始
    man.Reset();//发送信号,行动暂停
    
  4. CountDownEvent类信号(多命令一)

    CountdownEvent countdown = new CountdownEvent(4);//下属兵团数量
    countdown.Wait();//指挥官等待报告
    countdown.Signal();//兵团发送信号