线程和线程池的用法以及lock在线程中

Thread thread = new Thread(threadStart);//传入委托

thread.start//开启线程

thread.Abort//终结的线程

thread.ResetAbort(); //终结的线程继续执行

thread.Suspend//线程挂起可以等待在次被使用

thread.Resume//恢复被挂起的线程可能会有延时

ThreadPool.QueueUserWorkItem

ThreadPool.QueueUserWorkItem(WaitCallback(WaitWork), object);

将方法提交到线程池里等待执行里面的参数第一个是代表回调方法,另一个是WaitCallback传的参数

ThreadPool.SetMinThreads和ThreadPool.SetMaxThreads

   ThreadPool.SetMinThreads(2,2);

前面的参数是代表线程池中复制想成的最大数目,后面是代表线程的最大数目
   ThreadPool.SetMaxThreads(10,10);

SetMinThreads和SetMaxThreads是线程池中最小线程数和最大线程

public class Myclass()
{
    private int num=0;
    public void Locknum()
     {

       lock(this)
        {
           num++;
        }

    }

}

当多个线程同时访问同一个对象实例的代码块时,只有一个线程可以执行该代码块,其他线程需要等待该线程执行完毕后才能继续执行。lock(this)锁定的是当前对象实例,即多个线程需要竞争同一个锁定对象,只有一个线程可以拥有该对象实例的锁定权。以上示列

lock的用法:

public class Myclass()
{
    private int num=0;
    private Object obj=new Object();
    public void Locknum()
     {

       lock(obj)
        {
           num++;
        }

    }

}

当多个线程同时访问同一个被锁定的object实例的代码块时,只有一个线程可以执行该代码块,其他线程需要等待该线程执行完毕后才能继续执行。lock(object)锁定的是指定的object实例,多个线程需要竞争同一个锁定对象,以上代码块

总结Lock在多线程环境下,lock关键字是实现线程同步的重要手段,但不同的锁定方式有着不同的优缺点。在选择锁定方式时,需要考虑到线程竞争情况、锁定范围、代码复杂度以及程序性能等因素

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值