1 前言
控制多线程同步的方法很多,比如加同步锁机制,但是这会带来一定的性能消耗,因为要排队机制,前段时间看了别人的代码有个类(ThreadLocal<T> 泛型类)引起了我的注意。
2. 概念ThreadLocal
查看MSDN解释:提供数据的线程本地存储,其实通俗易懂的讲就是一个变量在多个线程中实现多个拷贝(副本),因为多线程的机制,由于各个线程的变量是互不影响的,所以不用担心变量引起了污染,各用各的不用担心。
比如在数据库连接操作或是ORM上下文操作的时候就可以实现多个线程的共用变量,把操作数据的上下文放在ThreadLocal<EFContext>,每个线程都有自己的上下文操作对象。由于asp.net 是多线程机制,所以各个请求互不影响,这个在工作单元模式中可以使用.
补充:ThreadLocal<T> 简单易俗的说就是每个线程在范围内(当前线程内部)可以保存相关数据,这个数据只对当前线程有效,比如 定义一个变量 int i=1, 线程A 操作i变量自增10次 那么i在该线程的值是10,B线程内自增5次,那么i在线程的值是5,两个互不影响。这个类的主要作用是可以在线程范围内共享变量值。